summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorboliu <boliu@chromium.org>2014-12-03 13:13:48 -0800
committerCommit bot <commit-bot@chromium.org>2014-12-03 21:14:19 +0000
commite2f86986cda7de44310c62045262b231458ed117 (patch)
tree9945fa8a4a37465c7e58d5b87cc872c44ba73bdf
parent0309b1db84a6afa509abbc0d49622e0db5ce552d (diff)
downloadchromium_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}
-rw-r--r--android_webview/browser/browser_view_renderer.cc16
-rw-r--r--android_webview/browser/deferred_gpu_command_service.cc1
-rw-r--r--android_webview/browser/hardware_renderer.cc1
-rw-r--r--android_webview/browser/shared_renderer_state.cc4
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java11
-rw-r--r--android_webview/native/aw_contents.cc10
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());
}