diff --git a/gfx/layers/Makefile.in b/gfx/layers/Makefile.in index 3f07dbdae222..68fe45140732 100644 --- a/gfx/layers/Makefile.in +++ b/gfx/layers/Makefile.in @@ -134,6 +134,7 @@ EXPORTS_mozilla/layers =\ ShadowLayersChild.h \ ShadowLayersParent.h \ ShadowLayersManager.h \ + RenderTrace.h \ $(NULL) CPPSRCS += \ diff --git a/gfx/layers/RenderTrace.h b/gfx/layers/RenderTrace.h index 4ddf58e84dbe..782cf74f1963 100644 --- a/gfx/layers/RenderTrace.h +++ b/gfx/layers/RenderTrace.h @@ -64,6 +64,22 @@ void renderTraceEventStart(const char *aComment, const char *aColor); void renderTraceEventEnd(const char *aComment, const char *aColor); void renderTraceEventEnd(const char *aColor); +struct RenderTraceScope { +public: + RenderTraceScope(const char *aComment, const char *aColor) + : mComment(aComment) + , mColor(aColor) + { + renderTraceEventStart(mComment, mColor); + } + ~RenderTraceScope() { + renderTraceEventEnd(mComment, mColor); + } +private: + const char *mComment; + const char *mColor; +}; + #ifndef MOZ_RENDERTRACE inline void RenderTraceLayers(Layer *aLayer, const char *aColor, const gfx3DMatrix aRootTransform, bool aReset) {} diff --git a/gfx/layers/basic/BasicLayers.cpp b/gfx/layers/basic/BasicLayers.cpp index 066b3134e796..ebb3f3aa962a 100644 --- a/gfx/layers/basic/BasicLayers.cpp +++ b/gfx/layers/basic/BasicLayers.cpp @@ -1841,6 +1841,8 @@ BasicLayerManager::PaintLayer(gfxContext* aTarget, void* aCallbackData, ReadbackProcessor* aReadback) { + RenderTraceScope trace("BasicLayerManager::PaintLayer", "707070"); + const nsIntRect* clipRect = aLayer->GetEffectiveClipRect(); const gfx3DMatrix& effectiveTransform = aLayer->GetEffectiveTransform(); BasicContainerLayer* container = static_cast(aLayer); diff --git a/widget/android/nsWindow.cpp b/widget/android/nsWindow.cpp index ed51a710f8e8..75090c8bc822 100644 --- a/widget/android/nsWindow.cpp +++ b/widget/android/nsWindow.cpp @@ -45,6 +45,7 @@ #include "mozilla/dom/ContentChild.h" #include "mozilla/unused.h" #include "mozilla/Preferences.h" +#include "mozilla/layers/RenderTrace.h" using mozilla::dom::ContentParent; using mozilla::dom::ContentChild; @@ -941,7 +942,9 @@ nsWindow::OnGlobalAndroidEvent(AndroidGeckoEvent *ae) break; case AndroidGeckoEvent::DRAW: + layers::renderTraceEventStart("Global draw start", "414141"); win->OnDraw(ae); + layers::renderTraceEventEnd("414141"); break; case AndroidGeckoEvent::IME_EVENT: @@ -1017,6 +1020,7 @@ nsWindow::DrawTo(gfxASurface *targetSurface) bool nsWindow::DrawTo(gfxASurface *targetSurface, const nsIntRect &invalidRect) { + mozilla::layers::RenderTraceScope trace("DrawTo", "717171"); if (!mIsVisible) return false; @@ -1049,6 +1053,7 @@ nsWindow::DrawTo(gfxASurface *targetSurface, const nsIntRect &invalidRect) nsRefPtr ctx = new gfxContext(targetSurface); { + mozilla::layers::RenderTraceScope trace2("Basic DrawTo", "727272"); AutoLayerManagerSetup setupLayerManager(this, ctx, BasicLayerManager::BUFFER_NONE); @@ -1150,6 +1155,7 @@ nsWindow::OnDraw(AndroidGeckoEvent *ae) nsCOMPtr metadataProvider = AndroidBridge::Bridge()->GetDrawMetadataProvider(); + layers::renderTraceEventStart("Check supress", "424242"); bool paintingSuppressed = false; if (metadataProvider) { metadataProvider->PaintingSuppressed(&paintingSuppressed); @@ -1158,11 +1164,14 @@ nsWindow::OnDraw(AndroidGeckoEvent *ae) __android_log_print(ANDROID_LOG_ERROR, "Gecko", "### Painting suppressed!"); return; } + layers::renderTraceEventEnd("Check supress", "424242"); + layers::renderTraceEventStart("Get Drawable", "424343"); nsAutoString metadata; if (metadataProvider) { metadataProvider->GetDrawMetadata(metadata); } + layers::renderTraceEventEnd("Get Drawable", "424343"); #if 0 // BEGIN HACK: gl layers @@ -1171,10 +1180,12 @@ nsWindow::OnDraw(AndroidGeckoEvent *ae) event.region = tileRect; #endif + layers::renderTraceEventStart("Get surface", "424545"); static unsigned char bits2[32 * 32 * 2]; nsRefPtr targetSurface = new gfxImageSurface(bits2, gfxIntSize(32, 32), 32 * 2, gfxASurface::ImageFormatRGB16_565); + layers::renderTraceEventEnd("Get surface", "424545"); #if 0 nsRefPtr ctx = new gfxContext(targetSurface); @@ -1187,6 +1198,7 @@ nsWindow::OnDraw(AndroidGeckoEvent *ae) // END HACK: gl layers #endif + layers::renderTraceEventStart("Check Bridge", "434444"); nsIntRect dirtyRect = ae->Rect().Intersect(nsIntRect(0, 0, gAndroidBounds.width, gAndroidBounds.height)); AndroidGeckoLayerClient &client = AndroidBridge::Bridge()->GetLayerClient(); @@ -1194,16 +1206,21 @@ nsWindow::OnDraw(AndroidGeckoEvent *ae) __android_log_print(ANDROID_LOG_ERROR, "Gecko", "### BeginDrawing returned false!"); return; } + layers::renderTraceEventEnd("Check Bridge", "434444"); + layers::renderTraceEventStart("Widget draw to", "434646"); if (targetSurface->CairoStatus()) { ALOG("### Failed to create a valid surface from the bitmap"); } else { __android_log_print(ANDROID_LOG_ERROR, "Gecko", "### Calling DrawTo()!"); DrawTo(targetSurface, dirtyRect); } + layers::renderTraceEventEnd("Widget draw to", "434646"); __android_log_print(ANDROID_LOG_ERROR, "Gecko", "### Calling EndDrawing()!"); + layers::renderTraceEventStart("Widget draw to", "434747"); client.EndDrawing(); + layers::renderTraceEventEnd("Widget draw to", "434747"); return; #endif