diff options
author | boliu <boliu@chromium.org> | 2014-12-03 13:13:48 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-12-03 21:14:19 +0000 |
commit | e2f86986cda7de44310c62045262b231458ed117 (patch) | |
tree | 9945fa8a4a37465c7e58d5b87cc872c44ba73bdf | |
parent | 0309b1db84a6afa509abbc0d49622e0db5ce552d (diff) | |
download | chromium_src-e2f86986cda7de44310c62045262b231458ed117.zip chromium_src-e2f86986cda7de44310c62045262b231458ed117.tar.gz chromium_src-e2f86986cda7de44310c62045262b231458ed117.tar.bz2 |
aw: Add more trace events to drawing functions
Add more events with an eye towards debugging as well as accounting
all the time spent on RenderThread.
BUG=
Review URL: https://codereview.chromium.org/778643003
Cr-Commit-Position: refs/heads/master@{#306676}
6 files changed, 37 insertions, 6 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc index 94bf53a..5b4e8b0 100644 --- a/android_webview/browser/browser_view_renderer.cc +++ b/android_webview/browser/browser_view_renderer.cc @@ -144,16 +144,23 @@ void BrowserViewRenderer::PrepareToDraw(const gfx::Vector2d& scroll, bool BrowserViewRenderer::OnDrawHardware() { TRACE_EVENT0("android_webview", "BrowserViewRenderer::OnDrawHardware"); shared_renderer_state_.InitializeHardwareDrawIfNeededOnUI(); - if (!compositor_) + if (!compositor_) { + TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_NoCompositor", + TRACE_EVENT_SCOPE_THREAD); return false; + } shared_renderer_state_.SetScrollOffsetOnUI(last_on_draw_scroll_offset_); if (!hardware_enabled_) { + TRACE_EVENT0("android_webview", "InitializeHwDraw"); hardware_enabled_ = compositor_->InitializeHwDraw(); } - if (!hardware_enabled_) + if (!hardware_enabled_) { + TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_HardwareNotEnabled", + TRACE_EVENT_SCOPE_THREAD); return false; + } if (last_on_draw_global_visible_rect_.IsEmpty() && parent_draw_constraints_.surface_rect.IsEmpty()) { @@ -174,8 +181,11 @@ bool BrowserViewRenderer::OnDrawHardware() { } scoped_ptr<cc::CompositorFrame> frame = CompositeHw(); - if (!frame.get()) + if (!frame.get()) { + TRACE_EVENT_INSTANT0("android_webview", "NoNewFrame", + TRACE_EVENT_SCOPE_THREAD); return false; + } shared_renderer_state_.SetCompositorFrameOnUI(frame.Pass(), false); return true; diff --git a/android_webview/browser/deferred_gpu_command_service.cc b/android_webview/browser/deferred_gpu_command_service.cc index b9b77dd..33ba1ac 100644 --- a/android_webview/browser/deferred_gpu_command_service.cc +++ b/android_webview/browser/deferred_gpu_command_service.cc @@ -152,6 +152,7 @@ DeferredGpuCommandService::shader_translator_cache() { } void DeferredGpuCommandService::RunTasks() { + TRACE_EVENT0("android_webview", "DeferredGpuCommandService::RunTasks"); bool has_more_tasks; { base::AutoLock lock(tasks_lock_); diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc index 7c348b5..9cfd1d3 100644 --- a/android_webview/browser/hardware_renderer.cc +++ b/android_webview/browser/hardware_renderer.cc @@ -142,6 +142,7 @@ void HardwareRenderer::DidBeginMainFrame() { } void HardwareRenderer::CommitFrame() { + TRACE_EVENT0("android_webview", "CommitFrame"); scroll_offset_ = shared_renderer_state_->GetScrollOffsetOnRT(); if (committed_frame_.get()) { TRACE_EVENT_INSTANT0("android_webview", diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc index 52e3479..576a8a0 100644 --- a/android_webview/browser/shared_renderer_state.cc +++ b/android_webview/browser/shared_renderer_state.cc @@ -10,6 +10,7 @@ #include "android_webview/browser/scoped_app_gl_state_restore.h" #include "android_webview/public/browser/draw_gl.h" #include "base/bind.h" +#include "base/debug/trace_event_argument.h" #include "base/lazy_instance.h" #include "base/location.h" @@ -257,7 +258,10 @@ bool SharedRendererState::ReturnedResourcesEmptyOnUI() const { } void SharedRendererState::DrawGL(AwDrawGLInfo* draw_info) { + TRACE_EVENT0("android_webview", "DrawFunctor"); if (draw_info->mode == AwDrawGLInfo::kModeSync) { + TRACE_EVENT_INSTANT0("android_webview", "kModeSync", + TRACE_EVENT_SCOPE_THREAD); if (hardware_renderer_) hardware_renderer_->CommitFrame(); return; diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index f8bd786..5f4a20f 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -42,6 +42,7 @@ import org.chromium.android_webview.permission.AwPermissionRequest; import org.chromium.base.CalledByNative; import org.chromium.base.JNINamespace; import org.chromium.base.ThreadUtils; +import org.chromium.base.TraceEvent; import org.chromium.base.VisibleForTesting; import org.chromium.components.navigation_interception.InterceptNavigationDelegate; import org.chromium.components.navigation_interception.NavigationParams; @@ -1050,7 +1051,12 @@ public class AwContents implements SmartClipProvider { //-------------------------------------------------------------------------------------------- public void onDraw(Canvas canvas) { - mAwViewMethods.onDraw(canvas); + try { + TraceEvent.begin(); + mAwViewMethods.onDraw(canvas); + } finally { + TraceEvent.end(); + } } public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @@ -2335,6 +2341,7 @@ public class AwContents implements SmartClipProvider { @Override public void onDraw(Canvas canvas) { if (isDestroyed()) { + TraceEvent.instant("EarlyOut_destroyed"); canvas.drawColor(getEffectiveBackgroundColor()); return; } @@ -2342,6 +2349,7 @@ public class AwContents implements SmartClipProvider { // For hardware draws, the clip at onDraw time could be different // from the clip during DrawGL. if (!canvas.isHardwareAccelerated() && !canvas.getClipBounds(mClipBoundsTemporary)) { + TraceEvent.instant("EarlyOut_software_empty_clip"); return; } @@ -2356,6 +2364,7 @@ public class AwContents implements SmartClipProvider { did_draw = mNativeGLDelegate.requestDrawGL(canvas, false, mContainerView); } if (!did_draw) { + TraceEvent.instant("NativeDrawFailed"); canvas.drawColor(getEffectiveBackgroundColor()); } diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index 50c6b36..cd2aae4 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -881,8 +881,11 @@ bool AwContents::OnDraw(JNIEnv* env, } gfx::Size view_size = browser_view_renderer_.size(); - if (view_size.IsEmpty()) + if (view_size.IsEmpty()) { + TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_EmptySize", + TRACE_EVENT_SCOPE_THREAD); return false; + } // TODO(hush): Right now webview size is passed in as the auxiliary bitmap // size, which might hurt performace (only for software draws with auxiliary @@ -891,8 +894,11 @@ bool AwContents::OnDraw(JNIEnv* env, // viewspace. Use the resulting rect as the auxiliary bitmap. scoped_ptr<SoftwareCanvasHolder> canvas_holder = SoftwareCanvasHolder::Create(canvas, scroll, view_size); - if (!canvas_holder || !canvas_holder->GetCanvas()) + if (!canvas_holder || !canvas_holder->GetCanvas()) { + TRACE_EVENT_INSTANT0("android_webview", "EarlyOut_EmptySize", + TRACE_EVENT_SCOPE_THREAD); return false; + } return browser_view_renderer_.OnDrawSoftware(canvas_holder->GetCanvas()); } |