| | import http.server
|
| | import os
|
| | from datetime import datetime
|
| | import webbrowser
|
| | import urllib.request
|
| |
|
| |
|
| |
|
| | class MyHandler(http.server.BaseHTTPRequestHandler):
|
| | def do_GET(self):
|
| | try:
|
| |
|
| | if self.path == "/":
|
| | self.send_response(200)
|
| | self.send_header("Content-type", "text/html")
|
| | self.end_headers()
|
| | with open("watch_trace.html", "rb") as file:
|
| | self.wfile.write(file.read())
|
| |
|
| |
|
| | elif self.path == "/trace.json":
|
| | self.send_response(200)
|
| | self.send_header("Content-type", "application/json")
|
| | self.end_headers()
|
| | with open("trace.json", "rb") as file:
|
| | while chunk := file.read(8192):
|
| | self.wfile.write(chunk)
|
| |
|
| |
|
| | elif self.path == "/mtime":
|
| | mtime = os.path.getmtime("trace.json")
|
| | last_modified_date = datetime.fromtimestamp(mtime).strftime(
|
| | "%Y-%m-%d %H:%M:%S"
|
| | )
|
| | self.send_response(200)
|
| | self.send_header("Content-type", "text/plain")
|
| | self.end_headers()
|
| | self.wfile.write(last_modified_date.encode())
|
| |
|
| | elif self.path.startswith("/perfetto"):
|
| | proxy_url = "https://ui.perfetto.dev" + self.path[len("/perfetto") :]
|
| | print("Proxying request to " + proxy_url)
|
| | with urllib.request.urlopen(proxy_url) as response:
|
| | self.send_response(response.status)
|
| |
|
| | self.end_headers()
|
| | res = response.read()
|
| | if self.path.endswith("frontend_bundle.js"):
|
| | print("Activating replacement")
|
| |
|
| | res = res.replace(
|
| | b"throw new Error(`EngineProxy ${this.tag} was disposed.`);",
|
| | b"return null;",
|
| | )
|
| |
|
| | res = res.replace(b"collapsed: true", b"collapsed: false")
|
| | res = res.replace(
|
| | b"collapsed: !hasHeapProfiles", b"collapsed: false"
|
| | )
|
| | for header in response.headers:
|
| | if header == "Content-Length":
|
| | self.send_header(header, len(res))
|
| | self.send_header(header, response.headers[header])
|
| | self.wfile.write(res)
|
| |
|
| | else:
|
| | self.send_error(404, "File Not Found: {}".format(self.path))
|
| |
|
| | except IOError:
|
| | self.send_error(404, "File Not Found: {}".format(self.path))
|
| |
|
| |
|
| |
|
| | def run(server_class=http.server.HTTPServer, handler_class=MyHandler):
|
| | server_address = ("", 8000)
|
| | httpd = server_class(server_address, handler_class)
|
| | print("Starting httpd...")
|
| | webbrowser.open("http://localhost:8000")
|
| | httpd.serve_forever()
|
| |
|
| |
|
| |
|
| | if __name__ == "__main__":
|
| | run()
|
| |
|