Bug 1371838 - export the gecko profiler registering function to WR. r=jrmuizel
authorJerryShih <hshih@mozilla.com>
Sat, 11 Nov 2017 18:57:31 +0800
changeset 444680 8e69fae378b7bd766824f43d5c5935f745821730
parent 444679 fa1adc80866df83946da2991273861af06ebf98b
child 444681 a6ad193d398eeb72b8a68a7db5cf684ec16e4a4b
push id1618
push userCallek@gmail.com
push dateThu, 11 Jan 2018 17:45:48 +0000
treeherdermozilla-release@882ca853e05a [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1371838 - export the gecko profiler registering function to WR. r=jrmuizel MozReview-Commit-ID: 2gVAmU2xomP
--- a/gfx/layers/wr/WebRenderBridgeParent.cpp
+++ b/gfx/layers/wr/WebRenderBridgeParent.cpp
@@ -96,16 +96,29 @@ void* get_proc_address_from_glcontext(vo
   mozilla::gl::GLContext* glcontext = reinterpret_cast<mozilla::gl::GLContext*>(glcontext_ptr);
   if (!glcontext) {
     return nullptr;
   PRFuncPtr p = glcontext->LookupSymbol(procname);
   return reinterpret_cast<void*>(p);
+gecko_profiler_register_thread(const char* name)
+  char stackTop;
+  profiler_register_thread(name, &stackTop);
+  profiler_unregister_thread();
 namespace mozilla {
 namespace layers {
 using namespace mozilla::gfx;
 class MOZ_STACK_CLASS AutoWebRenderBridgeParentAsyncMessageSender
--- a/gfx/webrender_bindings/src/bindings.rs
+++ b/gfx/webrender_bindings/src/bindings.rs
@@ -582,16 +582,21 @@ pub unsafe extern "C" fn wr_rendered_epo
 /// cbindgen:postfix=WR_DESTRUCTOR_SAFE_FUNC
 pub unsafe extern "C" fn wr_rendered_epochs_delete(pipeline_epochs: *mut WrRenderedEpochs) {
+extern "C" {
+    fn gecko_profiler_register_thread(name: *const ::std::os::raw::c_char);
+    fn gecko_profiler_unregister_thread();
 pub struct WrThreadPool(Arc<rayon::ThreadPool>);
 pub unsafe extern "C" fn wr_thread_pool_new() -> *mut WrThreadPool {
     let worker_config = rayon::Configuration::new()
         .thread_name(|idx|{ format!("WebRender:Worker#{}", idx) })
         .start_handler(|idx| {
             register_thread_with_profiler(format!("WebRender:Worker#{}", idx));
--- a/gfx/webrender_bindings/webrender_ffi.h
+++ b/gfx/webrender_bindings/webrender_ffi.h
@@ -21,16 +21,18 @@ bool is_in_main_thread();
 bool is_in_render_thread();
 bool is_glcontext_egl(void* glcontext_ptr);
 bool gfx_use_wrench();
 const char* gfx_wr_resource_path_override();
 void gfx_critical_note(const char* msg);
 void gfx_critical_error(const char* msg);
 void gecko_printf_stderr_output(const char* msg);
 void* get_proc_address_from_glcontext(void* glcontext_ptr, const char* procname);
+void gecko_profiler_register_thread(const char* threadname);
+void gecko_profiler_unregister_thread();
 } // extern "C"
 // Some useful defines to stub out webrender binding functions for when we
 // build gecko without webrender. We try to tell the compiler these functions
 // are unreachable in that case, but VC++ emits a warning if it finds any
 // unreachable functions invoked from destructors. That warning gets turned into
 // an error and causes the build to fail. So for wr_* functions called by
--- a/gfx/webrender_bindings/webrender_ffi_generated.h
+++ b/gfx/webrender_bindings/webrender_ffi_generated.h
@@ -938,16 +938,20 @@ extern void AddFontData(WrFontKey aKey,
 extern void AddNativeFontHandle(WrFontKey aKey,
                                 void *aHandle,
                                 uint32_t aIndex);
 extern void DeleteFontData(WrFontKey aKey);
 extern void gecko_printf_stderr_output(const char *aMsg);
+extern void gecko_profiler_register_thread(const char *aName);
+extern void gecko_profiler_unregister_thread();
 extern void gfx_critical_error(const char *aMsg);
 extern void gfx_critical_note(const char *aMsg);
 extern bool gfx_use_wrench();
 extern const char *gfx_wr_resource_path_override();