diff options
author | Hana (Hyang-Ah) Kim <hyangah@gmail.com> | 2020-02-18 22:41:20 -0500 |
---|---|---|
committer | Hyang-Ah Hana Kim <hyangah@gmail.com> | 2020-02-20 19:12:11 +0000 |
commit | 75ea964b3f6073076e1a86a0de2be9a2f159da24 (patch) | |
tree | d889e3b3b5009c0785b4089730cc07e5155c3963 /src/cmd/trace | |
parent | 4084c125cce2b5a6009fe767cc39a1ec28914786 (diff) | |
download | go-git-75ea964b3f6073076e1a86a0de2be9a2f159da24.tar.gz |
cmd/trace: update to use WebComponents V0 polyfill
Old trace viewer stopped working with Chrome M80+ because the
old trace viewer heavily depended on WebComponents V0 which are deprecated.
Trace viewer recently migrated to use WebComponents V0 polyfill
(crbug.com/1036492). This CL brings in the newly updated trace_viewer_full.html
(sync'd @ 9508452e)
and updates the javascript snippet included in the /trace endpoint
to use the polyfill.
This brings in webcomponents.min.js copied from
https://chromium.googlesource.com/catapult/+/9508452e18f130c98499cb4c4f1e1efaedee8962/third_party/polymer/components/webcomponentsjs/webcomponents.min.js
That is necessary because the /trace endpoint needs to import
the vulcanized trace_viewer_full.html.
It's possible that some features are not working correctly with
this polyfill. In that case, report the issue to crbug.com/1036492.
There will be a warning message in the UI (yellow banner above the timeline)
which can be hidden by clicking the 'hide' button.
This allows to render the trace in browsers other than chrome in theory,
but I observed some buttons and functions still don't work outside
chrome.
Fixes #34374.
Change-Id: Ib575f756f5e6b22ad904ede6e4d224a995ebe259
Reviewed-on: https://go-review.googlesource.com/c/go/+/219997
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Austin Clements <austin@google.com>
Diffstat (limited to 'src/cmd/trace')
-rw-r--r-- | src/cmd/trace/trace.go | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/src/cmd/trace/trace.go b/src/cmd/trace/trace.go index f39a397d0d..b452376627 100644 --- a/src/cmd/trace/trace.go +++ b/src/cmd/trace/trace.go @@ -25,6 +25,7 @@ func init() { http.HandleFunc("/trace", httpTrace) http.HandleFunc("/jsontrace", httpJsonTrace) http.HandleFunc("/trace_viewer_html", httpTraceViewerHTML) + http.HandleFunc("/webcomponents.min.js", webcomponentsJS) } // httpTrace serves either whole trace (goid==0) or trace for goid goroutine. @@ -43,14 +44,26 @@ func httpTrace(w http.ResponseWriter, r *http.Request) { } -// See https://github.com/catapult-project/catapult/blob/master/tracing/docs/embedding-trace-viewer.md -// This is almost verbatim copy of: -// https://github.com/catapult-project/catapult/blob/master/tracing/bin/index.html -// on revision 5f9e4c3eaa555bdef18218a89f38c768303b7b6e. +// https://chromium.googlesource.com/catapult/+/9508452e18f130c98499cb4c4f1e1efaedee8962/tracing/docs/embedding-trace-viewer.md +// This is almost verbatim copy of https://chromium-review.googlesource.com/c/catapult/+/2062938/2/tracing/bin/index.html var templTrace = ` <html> <head> -<link href="/trace_viewer_html" rel="import"> +<script src="/webcomponents.min.js"></script> +<script> +'use strict'; + +function onTraceViewerImportFail() { + document.addEventListener('DOMContentLoaded', function() { + document.body.textContent = + '/trace_viewer_full.html is missing. File a bug in https://golang.org/issue'; + }); +} +</script> + +<link rel="import" href="/trace_viewer_html" + onerror="onTraceViewerImportFail(event)"> + <style type="text/css"> html, body { box-sizing: border-box; @@ -77,10 +90,10 @@ var templTrace = ` function load() { var req = new XMLHttpRequest(); - var is_binary = /[.]gz$/.test(url) || /[.]zip$/.test(url); + var isBinary = /[.]gz$/.test(url) || /[.]zip$/.test(url); req.overrideMimeType('text/plain; charset=x-user-defined'); req.open('GET', url, true); - if (is_binary) + if (isBinary) req.responseType = 'arraybuffer'; req.onreadystatechange = function(event) { @@ -89,7 +102,7 @@ var templTrace = ` window.setTimeout(function() { if (req.status === 200) - onResult(is_binary ? req.response : req.responseText); + onResult(isBinary ? req.response : req.responseText); else onResultFail(req.status); }, 0); @@ -136,17 +149,17 @@ var templTrace = ` overlay.visible = true; } - document.addEventListener('DOMContentLoaded', function() { + document.addEventListener('WebComponentsReady', function() { var container = document.createElement('track-view-container'); container.id = 'track_view_container'; viewer = document.createElement('tr-ui-timeline-view'); viewer.track_view_container = container; - viewer.appendChild(container); + Polymer.dom(viewer).appendChild(container); viewer.id = 'trace-viewer'; viewer.globalMode = true; - document.body.appendChild(viewer); + Polymer.dom(document.body).appendChild(viewer); url = '/jsontrace?{{PARAMS}}'; load(); @@ -165,6 +178,10 @@ func httpTraceViewerHTML(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, filepath.Join(runtime.GOROOT(), "misc", "trace", "trace_viewer_full.html")) } +func webcomponentsJS(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, filepath.Join(runtime.GOROOT(), "misc", "trace", "webcomponents.min.js")) +} + // httpJsonTrace serves json trace, requested from within templTrace HTML. func httpJsonTrace(w http.ResponseWriter, r *http.Request) { defer debug.FreeOSMemory() |