Closed Bug 1542826 Opened 5 years ago Closed 5 years ago

Mobile profiling support

Categories

(Core :: Graphics: WebRender, task, P3)

Other Branch
task

Tracking

()

RESOLVED FIXED
mozilla68
Tracking Status
firefox68 --- fixed

People

(Reporter: kats, Assigned: kats)

References

(Blocks 1 open bug)

Details

(Whiteboard: [wr-q2][wr-april][wr-amvp])

Attachments

(9 files)

47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review
47 bytes, text/x-phabricator-request
Details | Review

One of the things on the WR roadmap developed last week is mobile profiling support. This is on my to-do list for April, although I need input from Glenn as to what specifically he would like done.

Glenn, thoughts?

Flags: needinfo?(gwatson)

I think there's two parts to this:

  1. Implementation of an interface for quickly toggling / setting debug values.

For example, we may choose to have a checkbox to disable all clip masks, or all text runs. about:config is not a great place for this on GVE, because it's (a) quite a slow process when wanting to quickly tweak profiling settings (b) navigating to about:config on GVE may affect the profiling of the current page being investigated.

One option would be to add support in a page in the WR web debugger to tweak these values, and get the WR web(socket) debug server working on mobile (it may already just work). Another option could be integration in the remote webide views that are used for remote profiling on android. Or perhaps there is another way to provide this interface?

Whatever we decide here is probably useful for other features on mobile, such as triggering a WR-capture.

  1. Adding a range of tweakable settings, which we can use to identify the effect of various GPU costs. We would probably start with something like:
  • Disable opaque pass
  • Disable alpha pass
  • Disable clip masks
  • Disable various primitive types (text / gradient etc)
Flags: needinfo?(gwatson)
Whiteboard: [wr-q2][wr-april]
Whiteboard: [wr-q2][wr-april] → [wr-q2][wr-april][wr-amvp]

After various detours and distractions, I spent some time today looking at this.

(In reply to Glenn Watson [:gw] from comment #1)

One option would be to add support in a page in the WR web debugger to tweak these values, and get the WR web(socket) debug server working on mobile (it may already just work). Another option could be integration in the remote webide views that are used for remote profiling on android. Or perhaps there is another way to provide this interface?

I think the WR websocket debugger is probably the best path forward here. It does basically "just work" on Android, provide you turn on the feature, vendor the extra rust crates, and run adb forward tcp:3583 tcp:3583 to forward the ports to the device. We can probably make it so that the debug server is built by default and only enabled via a runtime configuration (pref or something else) which will make it a little easier to use.

The main reason I'm leaning towards this option vs say the WebIDE views is because this is more of a gecko/WR developer feature whereas WebIDE is more intended for web authors. Also the WR debugger is easy to iterate on without having to get reviews from UX and/or devtools folks.

(In reply to Kartikaya Gupta (email:kats@mozilla.com) from comment #2)

The main reason I'm leaning towards this option vs say the WebIDE views is because this is more of a gecko/WR developer feature whereas WebIDE is more intended for web authors. Also the WR debugger is easy to iterate on without having to get reviews from UX and/or devtools folks.

FWIW, WebIDE is deprecated, intention is to use about:debugging going forward.

I'm open to either option, but I'd like to push back on the above analysis a bit:

  • The Gecko profiler is totally intended for Gecko developers debugging things.
  • We already have tons of checkboxes in the "features" section like "sequential styling" that only make sense to gecko developers. I doubt review would be much of a burden.
  • There's value in having all the knobs accessible via the same interface, which makes them more discoverable to other developers (who e.g. might discover that disabling opaque passes makes the page much faster).

That said, there are some downsides:

  • The features list is already big, and we might need a separate sub-panel for the graphics stuff.
  • It's a little odd that you technically need to be collecting a gecko profiler for the relevant flags to have an effect.

That's fair. There's probably some value in having it exposed in the profiler settings as well, given that the two are not mutually exclusive. Both front-ends would toggle the same backend DebugFlags bits and share much of the same underlying implementation.

Type: defect → task

The debugger in WebRender uses the image crate to generate PNGs, and so
it only really needs the png codec feature from the image crate.

This adds a RendererOption flag to control whether the debug server is
enabled. This allows the debug server feature to be built without
enabling the feature by default; it can then be enabled on a
per-renderer basis via the RendererOption.

Depends on D28351

This builds the feature but leaves it disabled by default at runtime.

Depends on D28352

This patch is the output of rebuilding the debugger frontend with a
recent npm installation. The changes to dist/ and the addition of
package-lock.json are a result of the build. The changes to package.json
and main.js were done manually to work around an incompatible change
in beufy 0.6.7 (the lib/ folder changed to dist/).

Depends on D28356

Attachment #9059848 - Attachment description: Bug 1542826 - Add BSD-3-Clause license to about:license and whitelist. r=froydnj!,mhoye! → Bug 1542826 - Add BSD-3-Clause license to about:license and whitelist sha1 which uses it. r=froydnj!,mhoye!
Pushed by kgupta@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/7df230ea5122
Reduce featureset enabled on image crate. r=gw
https://hg.mozilla.org/integration/autoland/rev/314f9bc7dafe
Allow enabling/disabling the debug server at runtime. r=gw
https://hg.mozilla.org/integration/autoland/rev/e5af8cd01080
Build the debugger feature in webrender by default. r=gw
https://hg.mozilla.org/integration/autoland/rev/5744891efeef
Re-vendor rust dependencies. r=froydnj
https://hg.mozilla.org/integration/autoland/rev/5118d628ec89
Add BSD-3-Clause license to about:license and whitelist sha1 which uses it. r=froydnj,mhoye
https://hg.mozilla.org/integration/autoland/rev/a02e469be7b3
Add more debug flags to disable various things. r=gw
https://hg.mozilla.org/integration/autoland/rev/1dba743761b7
Rebuild the debugger front-end. r=gw
https://hg.mozilla.org/integration/autoland/rev/f3516e1416f0
Add a pref to control the debug server. r=gw

Backed out for build bustages.

Push with failure: https://treeherder.mozilla.org/#/jobs?repo=autoland&resultStatus=testfailed%2Cbusted%2Cexception&classifiedState=unclassified&revision=f3516e1416f00fc8e157effc0842c97929be362a

Failure log: https://treeherder.mozilla.org/logviewer.html#/jobs?job_id=242131620&repo=autoland&lineNumber=14024

[task 2019-04-23T20:10:30.689Z] 20:10:30 ERROR - error[E0308]: mismatched types
[task 2019-04-23T20:10:30.689Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/net2/src/socket.rs:40:51
[task 2019-04-23T20:10:30.690Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.690Z] 20:10:30 INFO - 40 | ::cvt(c::bind(self.inner.raw(), addr, len as len_t)).map(|_| ())
[task 2019-04-23T20:10:30.691Z] 20:10:30 INFO - | ^^^^^^^^^^^^ expected u32, found i32
[task 2019-04-23T20:10:30.691Z] 20:10:30 ERROR - error: aborting due to previous error
[task 2019-04-23T20:10:30.692Z] 20:10:30 INFO - For more information about this error, try rustc --explain E0308.
[task 2019-04-23T20:10:30.692Z] 20:10:30 ERROR - error: Could not compile net2.
[task 2019-04-23T20:10:30.692Z] 20:10:30 INFO - Caused by:
[task 2019-04-23T20:10:30.693Z] 20:10:30 INFO - process didn't exit successfully: CARGO_PKG_VERSION_PATCH=32 CARGO_MANIFEST_DIR=/builds/worker/workspace/build/src/third_party/rust/net2 CARGO_PKG_DESCRIPTION='Extensions to the standard library'\''s networking types as proposed in RFC 1158. [task 2019-04-23T20:10:30.695Z] 20:10:30 INFO - ' CARGO_PKG_REPOSITORY='https://github.com/rust-lang-nursery/net2-rs' CARGO_PKG_VERSION_MINOR=2 CARGO_PKG_HOMEPAGE='https://github.com/rust-lang-nursery/net2-rs' LD_LIBRARY_PATH='/builds/worker/workspace/build/src/obj-firefox/release/deps:/builds/worker/workspace/build/src/rustc/lib' CARGO=/builds/worker/workspace/build/src/rustc/bin/cargo CARGO_PKG_VERSION_PRE= CARGO_PKG_VERSION=0.2.32 CARGO_PKG_NAME=net2 CARGO_PKG_AUTHORS='Alex Crichton <alex@alexcrichton.com>' CARGO_PKG_VERSION_MAJOR=0 /builds/worker/workspace/build/src/sccache2/sccache /builds/worker/workspace/build/src/rustc/bin/rustc --crate-name net2 /builds/worker/workspace/build/src/third_party/rust/net2/src/lib.rs --color never --crate-type lib --emit=dep-info,link -C opt-level=2 -C panic=abort -C codegen-units=1 --cfg 'feature="default"' --cfg 'feature="duration"' -C metadata=354c78d72ab3f4e9 -C extra-filename=-354c78d72ab3f4e9 --out-dir /builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/deps --target aarch64-linux-android -C linker=/builds/worker/workspace/build/src/build/cargo-linker -L dependency=/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/deps -L dependency=/builds/worker/workspace/build/src/obj-firefox/release/deps --extern cfg_if=/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/deps/libcfg_if-2bfa6c093b4b19e8.rlib --extern libc=/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/deps/liblibc-56a0813a2d56ca48.rlib --cap-lints warn -C opt-level=2 -C debuginfo=2 -Dwarnings (exit code: 1)
[task 2019-04-23T20:10:30.695Z] 20:10:30 INFO - warning: build failed, waiting for other jobs to finish...
[task 2019-04-23T20:10:30.696Z] 20:10:30 INFO - warning: use of deprecated item 'core::sync::atomic::ATOMIC_USIZE_INIT': the new function is now preferred
[task 2019-04-23T20:10:30.696Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/crossbeam-epoch-0.3.1/src/atomic.rs:8:39
[task 2019-04-23T20:10:30.697Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.697Z] 20:10:30 INFO - 8 | use core::sync::atomic::{AtomicUsize, ATOMIC_USIZE_INIT};
[task 2019-04-23T20:10:30.698Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.698Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.698Z] 20:10:30 INFO - = note: #[warn(deprecated)] on by default
[task 2019-04-23T20:10:30.699Z] 20:10:30 INFO - warning: use of deprecated item 'core::sync::atomic::ATOMIC_USIZE_INIT': the new function is now preferred
[task 2019-04-23T20:10:30.700Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/crossbeam-epoch-0.3.1/src/atomic.rs:155:19
[task 2019-04-23T20:10:30.700Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.701Z] 20:10:30 INFO - 155 | data: ATOMIC_USIZE_INIT,
[task 2019-04-23T20:10:30.701Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.701Z] 20:10:30 INFO - help: use of deprecated item 'core::sync::atomic::ATOMIC_USIZE_INIT': the new function is now preferred
[task 2019-04-23T20:10:30.702Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.702Z] 20:10:30 INFO - 155 | data: AtomicUsize::new(0),
[task 2019-04-23T20:10:30.703Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.703Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] exit code: 0
[task 2019-04-23T20:10:30.705Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] running: "/builds/worker/workspace/build/src/sccache2/sccache" "/builds/worker/workspace/build/src/clang/bin/clang" "-std=gnu99" "--target=aarch64-linux-android" "-O2" "-ffunction-sections" "-fdata-sections" "-fPIC" "--target=aarch64-linux-android" "-I/builds/worker/workspace/build/src/obj-firefox/dist/system_wrappers" "-include" "/builds/worker/workspace/build/src/config/gcc_hidden.h" "-DNDEBUG=1" "-DTRIMMED=1" "-I/builds/worker/workspace/build/src/toolkit/library/rust" "-I/builds/worker/workspace/build/src/obj-firefox/toolkit/library/rust" "-I/builds/worker/workspace/build/src/obj-firefox/dist/include" "-I/builds/worker/workspace/build/src/obj-firefox/dist/include/nspr" "-I/builds/worker/workspace/build/src/obj-firefox/dist/include/nss" "-fPIC" "-include" "/builds/worker/workspace/build/src/obj-firefox/mozilla-config.h" "-DMOZILLA_CLIENT" "-Qunused-arguments" "-isystem" "/builds/worker/workspace/build/src/android-ndk/sysroot/usr/include/aarch64-linux-android" "-isystem" "/builds/worker/workspace/build/src/android-ndk/sysroot/usr/include" "-gcc-toolchain" "/builds/worker/workspace/build/src/android-ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64" "-D__ANDROID_API__=21" "-fstack-protector-strong" "-fno-short-enums" "-fno-exceptions" "-fstack-protector-strong" "-fno-strict-aliasing" "-ffunction-sections" "-fdata-sections" "-fno-math-errno" "-fPIC" "-pipe" "-g" "-Xclang" "-load" "-Xclang" "/builds/worker/workspace/build/src/obj-firefox/build/clang-plugin/libclang-plugin.so" "-Xclang" "-add-plugin" "-Xclang" "moz-check" "-Oz" "-fno-omit-frame-pointer" "-funwind-tables" "-DMOZILLA_CONFIG_H" "-DMDB_IDL_LOGN=9" "-o" "/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/build/lmdb-rkv-sys-937f5e5b7e054c74/out/midl.o" "-c" "/builds/worker/workspace/build/src/third_party/rust/lmdb-rkv-sys/lmdb/libraries/liblmdb/midl.c"
[task 2019-04-23T20:10:30.705Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] exit code: 0
[task 2019-04-23T20:10:30.706Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] AR_aarch64-linux-android = None
[task 2019-04-23T20:10:30.706Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] AR_aarch64_linux_android = Some("/builds/worker/workspace/build/src/clang/bin/llvm-ar")
[task 2019-04-23T20:10:30.707Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] running: "/builds/worker/workspace/build/src/clang/bin/llvm-ar" "crs" "/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/build/lmdb-rkv-sys-937f5e5b7e054c74/out/liblmdb.a" "/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/build/lmdb-rkv-sys-937f5e5b7e054c74/out/mdb.o" "/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/build/lmdb-rkv-sys-937f5e5b7e054c74/out/midl.o"
[task 2019-04-23T20:10:30.708Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] exit code: 0
[task 2019-04-23T20:10:30.708Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] cargo:rustc-link-lib=static=lmdb
[task 2019-04-23T20:10:30.709Z] 20:10:30 INFO - [lmdb-rkv-sys 0.8.3] cargo:rustc-link-search=native=/builds/worker/workspace/build/src/obj-firefox/aarch64-linux-android/release/build/lmdb-rkv-sys-937f5e5b7e054c74/out
[task 2019-04-23T20:10:30.709Z] 20:10:30 INFO - warning: use of deprecated item 'std::ascii::AsciiExt': use inherent methods instead
[task 2019-04-23T20:10:30.709Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/idna/src/punycode.rs:18:5
[task 2019-04-23T20:10:30.710Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.710Z] 20:10:30 INFO - 18 | use std::ascii::AsciiExt;
[task 2019-04-23T20:10:30.711Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.711Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.711Z] 20:10:30 INFO - = note: #[warn(deprecated)] on by default
[task 2019-04-23T20:10:30.712Z] 20:10:30 INFO - warning: use of deprecated item 'std::ascii::AsciiExt': use inherent methods instead
[task 2019-04-23T20:10:30.712Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/idna/src/uts46.rs:14:5
[task 2019-04-23T20:10:30.712Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.713Z] 20:10:30 INFO - 14 | use std::ascii::AsciiExt;
[task 2019-04-23T20:10:30.713Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.713Z] 20:10:30 INFO - warning: unused import: std::ascii::AsciiExt
[task 2019-04-23T20:10:30.714Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/idna/src/punycode.rs:18:5
[task 2019-04-23T20:10:30.714Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.715Z] 20:10:30 INFO - 18 | use std::ascii::AsciiExt;
[task 2019-04-23T20:10:30.715Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.715Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.716Z] 20:10:30 INFO - = note: #[warn(unused_imports)] on by default
[task 2019-04-23T20:10:30.716Z] 20:10:30 INFO - warning: unused import: std::ascii::AsciiExt
[task 2019-04-23T20:10:30.717Z] 20:10:30 INFO - --> /builds/worker/workspace/build/src/third_party/rust/idna/src/uts46.rs:14:5
[task 2019-04-23T20:10:30.717Z] 20:10:30 INFO - |
[task 2019-04-23T20:10:30.717Z] 20:10:30 INFO - 14 | use std::ascii::AsciiExt;
[task 2019-04-23T20:10:30.718Z] 20:10:30 INFO - | ^^^^^^^^^^^^^^^^^^^^
[task 2019-04-23T20:10:30.718Z] 20:10:30 INFO - error: build failed
[task 2019-04-23T20:10:30.719Z] 20:10:30 INFO - /builds/worker/workspace/build/src/config/makefiles/rust.mk:235: recipe for target 'force-cargo-library-build' failed
[task 2019-04-23T20:10:30.719Z] 20:10:30 ERROR - make[4]: *** [force-cargo-library-build] Error 101
[task 2019-04-23T20:10:30.720Z] 20:10:30 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/toolkit/library/rust'
[task 2019-04-23T20:10:30.720Z] 20:10:30 INFO - /builds/worker/workspace/build/src/config/recurse.mk:74: recipe for target 'toolkit/library/rust/target' failed
[task 2019-04-23T20:10:30.721Z] 20:10:30 ERROR - make[3]: *** [toolkit/library/rust/target] Error 2
[task 2019-04-23T20:10:30.721Z] 20:10:30 INFO - make[3]: *** Waiting for unfinished jobs....
[task 2019-04-23T20:10:30.722Z] 20:10:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/hal'
[task 2019-04-23T20:10:30.722Z] 20:10:30 INFO - hal/AndroidHal.o
[task 2019-04-23T20:10:30.722Z] 20:10:30 INFO - make[4]: Leaving directory '/builds/worker/workspace/build/src/obj-firefox/hal'
[task 2019-04-23T20:10:30.899Z] 20:10:30 INFO - make[4]: Entering directory '/builds/worker/workspace/build/src/obj-firefox/toolkit/crashreporter/rust'
[task 2019-04-23T20:10:30.899Z] 20:10:30 INFO - toolkit/crashreporter/rust/force-cargo-host-library-build
[task 2019-04-23T20:10:30.899Z] 20:10:30 INFO - /builds/worker/workspace/build/src/rustc/bin/cargo rustc --release --frozen --manifest-path /builds/worker/workspace/build/src/toolkit/crashreporter/rust/Cargo.toml -vv --lib --target=x86_64-unknown-linux-gnu

Backout: https://hg.mozilla.org/integration/autoland/rev/cffeafe28a4565fdd07582546190591c2279dcf0

Flags: needinfo?(kats)

Shoot. Looks like adding the ws (websocket server) rust crate is triggering the check added in bug 1376621. Will need to think about what to do here.

Flags: needinfo?(kats)

Tom, do you have any thoughts here? We have an off-by-default debugging feature in WebRender which opens a websocket server and can be interacted with via a webapp. This uses the rust ws crate which is running afoul of the checks in bug 1376621. Since this feature isn't going to be exposed to end users it seems like the proxy concern that bug 1376621 is mitigating is not really relevant here. I'm not sure if there's a good way around the checks for this particular scenario.

Flags: needinfo?(tom)

I think for now you can comment out the functions 1376621 is triggering; and file a followup bug assigned to me that makes the behavior of the check more intelligent for situations like this.

Flags: needinfo?(tom)

There were actually three different errors in the above landing.

One was the networking functions bit. Tom and I discussed on IRC, and I don't really want to remove that check (which is effectively what I'd be doing to allow the ws crate in) since it does provide value. For now I'll put it behind a default-off compile flag, so that the vendored crates still live in m-c but they won't get built into libgkrust. Devs can enable it locally. Going forward we can expose the knobs in the gecko profiler or other such tools and that will make it easier to use.

The second was that the net2 crate was failing to compile on 64-bit android platforms. That was resolved by updating the crate to the latest version.

And the third was the changes I made to the licensing check was causing the testLicense test to fail because I didn't update that to match.

With those three things fixed I have a green try push but I need to clean up the extra patches a bit.

Attachment #9059846 - Attachment description: Bug 1542826 - Build the debugger feature in webrender by default. r?gw → Bug 1542826 - Expose a mozconfig flag to build the WR debugger feature. r?gw,froydnj!
Pushed by kgupta@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e980a61a57d1
Reduce featureset enabled on image crate. r=gw
https://hg.mozilla.org/integration/autoland/rev/59a08c05c327
Allow enabling/disabling the debug server at runtime. r=gw
https://hg.mozilla.org/integration/autoland/rev/459c9408935d
Bump net2 to a version that builds on 64-bit android. r=froydnj
https://hg.mozilla.org/integration/autoland/rev/004c7b730f40
Expose a mozconfig flag to build the WR debugger feature. r=gw,froydnj
https://hg.mozilla.org/integration/autoland/rev/cdd4e1c5a9e5
Re-vendor rust dependencies. r=froydnj
https://hg.mozilla.org/integration/autoland/rev/3d0e1679baeb
Add BSD-3-Clause license to about:license and whitelist sha1 which uses it. r=froydnj,mhoye
https://hg.mozilla.org/integration/autoland/rev/6f62c7dd1b13
Add more debug flags to disable various things. r=gw
https://hg.mozilla.org/integration/autoland/rev/4cb155acf32f
Rebuild the debugger front-end. r=gw
https://hg.mozilla.org/integration/autoland/rev/a8eca5bd4f5b
Add a pref to control the debug server. r=gw
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: