Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(134)

Side by Side Diff: content/browser/android/content_view_core_impl.cc

Issue 16863005: cc: Add BeginFrameArgs (Closed) Base URL: http://git.chromium.org/chromium/src.git@nofrc12
Patch Set: Rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/content_view_core_impl.h" 5 #include "content/browser/android/content_view_core_impl.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_array.h" 8 #include "base/android/jni_array.h"
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/android/scoped_java_ref.h" 10 #include "base/android/scoped_java_ref.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_writer.h" 12 #include "base/json/json_writer.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "cc/layers/layer.h" 16 #include "cc/layers/layer.h"
17 #include "cc/output/begin_frame_args.h"
17 #include "content/browser/android/interstitial_page_delegate_android.h" 18 #include "content/browser/android/interstitial_page_delegate_android.h"
18 #include "content/browser/android/load_url_params.h" 19 #include "content/browser/android/load_url_params.h"
19 #include "content/browser/android/media_player_manager_impl.h" 20 #include "content/browser/android/media_player_manager_impl.h"
20 #include "content/browser/android/touch_point.h" 21 #include "content/browser/android/touch_point.h"
21 #include "content/browser/renderer_host/compositor_impl_android.h" 22 #include "content/browser/renderer_host/compositor_impl_android.h"
22 #include "content/browser/renderer_host/java/java_bound_object.h" 23 #include "content/browser/renderer_host/java/java_bound_object.h"
23 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h" 24 #include "content/browser/renderer_host/java/java_bridge_dispatcher_host_manager .h"
24 #include "content/browser/renderer_host/render_view_host_impl.h" 25 #include "content/browser/renderer_host/render_view_host_impl.h"
25 #include "content/browser/renderer_host/render_widget_host_impl.h" 26 #include "content/browser/renderer_host/render_widget_host_impl.h"
26 #include "content/browser/renderer_host/render_widget_host_view_android.h" 27 #include "content/browser/renderer_host/render_widget_host_view_android.h"
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 enum PopupItemType { 71 enum PopupItemType {
71 POPUP_ITEM_TYPE_GROUP = 0, 72 POPUP_ITEM_TYPE_GROUP = 0,
72 POPUP_ITEM_TYPE_DISABLED, 73 POPUP_ITEM_TYPE_DISABLED,
73 POPUP_ITEM_TYPE_ENABLED 74 POPUP_ITEM_TYPE_ENABLED
74 }; 75 };
75 76
76 namespace content { 77 namespace content {
77 78
78 namespace { 79 namespace {
79 80
81 const unsigned int kDefaultVSyncIntervalMicros = 16666u;
82 // TODO(brianderson): Use adaptive draw-time estimation.
83 const float kDefaultBrowserCompositeVSyncFraction = 1.0f / 3;
84
80 const void* kContentViewUserDataKey = &kContentViewUserDataKey; 85 const void* kContentViewUserDataKey = &kContentViewUserDataKey;
81 86
82 int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) { 87 int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) {
83 DCHECK(host); 88 DCHECK(host);
84 RenderProcessHost* render_process = host->GetProcess(); 89 RenderProcessHost* render_process = host->GetProcess();
85 DCHECK(render_process); 90 DCHECK(render_process);
86 if (render_process->HasConnection()) 91 if (render_process->HasConnection())
87 return render_process->GetHandle(); 92 return render_process->GetHandle();
88 else 93 else
89 return 0; 94 return 0;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 156
152 ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj, 157 ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj,
153 bool hardware_accelerated, 158 bool hardware_accelerated,
154 WebContents* web_contents, 159 WebContents* web_contents,
155 ui::ViewAndroid* view_android, 160 ui::ViewAndroid* view_android,
156 ui::WindowAndroid* window_android) 161 ui::WindowAndroid* window_android)
157 : java_ref_(env, obj), 162 : java_ref_(env, obj),
158 web_contents_(static_cast<WebContentsImpl*>(web_contents)), 163 web_contents_(static_cast<WebContentsImpl*>(web_contents)),
159 root_layer_(cc::Layer::Create()), 164 root_layer_(cc::Layer::Create()),
160 tab_crashed_(false), 165 tab_crashed_(false),
166 vsync_interval_(base::TimeDelta::FromMicroseconds(
167 kDefaultVSyncIntervalMicros)),
168 expected_browser_composite_time_(base::TimeDelta::FromMicroseconds(
169 kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)),
161 view_android_(view_android), 170 view_android_(view_android),
162 window_android_(window_android) { 171 window_android_(window_android) {
163 CHECK(web_contents) << 172 CHECK(web_contents) <<
164 "A ContentViewCoreImpl should be created with a valid WebContents."; 173 "A ContentViewCoreImpl should be created with a valid WebContents.";
165 174
166 // When a tab is restored (from a saved state), it does not have a renderer 175 // When a tab is restored (from a saved state), it does not have a renderer
167 // process. We treat it like the tab is crashed. If the content is loaded 176 // process. We treat it like the tab is crashed. If the content is loaded
168 // when the tab is shown, tab_crashed_ will be reset. Since 177 // when the tab is shown, tab_crashed_ will be reset. Since
169 // RenderWidgetHostView is associated with the lifetime of the renderer 178 // RenderWidgetHostView is associated with the lifetime of the renderer
170 // process, we use it to test whether there is a renderer process. 179 // process, we use it to test whether there is a renderer process.
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) { 703 void ContentViewCoreImpl::RemoveLayer(scoped_refptr<cc::Layer> layer) {
695 layer->RemoveFromParent(); 704 layer->RemoveFromParent();
696 } 705 }
697 706
698 void ContentViewCoreImpl::LoadUrl( 707 void ContentViewCoreImpl::LoadUrl(
699 NavigationController::LoadURLParams& params) { 708 NavigationController::LoadURLParams& params) {
700 GetWebContents()->GetController().LoadURLWithParams(params); 709 GetWebContents()->GetController().LoadURLWithParams(params);
701 tab_crashed_ = false; 710 tab_crashed_ = false;
702 } 711 }
703 712
704 void ContentViewCoreImpl::SetVSyncNotificationEnabled(bool enabled) { 713 void ContentViewCoreImpl::SetNeedsBeginFrame(bool enabled) {
705 JNIEnv* env = AttachCurrentThread(); 714 JNIEnv* env = AttachCurrentThread();
706 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); 715 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
707 if (obj.is_null()) 716 if (obj.is_null())
708 return; 717 return;
709 Java_ContentViewCore_setVSyncNotificationEnabled( 718 Java_ContentViewCore_setVSyncNotificationEnabled(
710 env, obj.obj(), static_cast<jboolean>(enabled)); 719 env, obj.obj(), static_cast<jboolean>(enabled));
711 } 720 }
712 721
713 void ContentViewCoreImpl::SetNeedsAnimate() { 722 void ContentViewCoreImpl::SetNeedsAnimate() {
714 JNIEnv* env = AttachCurrentThread(); 723 JNIEnv* env = AttachCurrentThread();
(...skipping 501 matching lines...) Expand 10 before | Expand all | Expand 10 after
1216 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1225 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
1217 if (!view) 1226 if (!view)
1218 return; 1227 return;
1219 1228
1220 RenderWidgetHostImpl* host = RenderWidgetHostImpl::From( 1229 RenderWidgetHostImpl* host = RenderWidgetHostImpl::From(
1221 view->GetRenderWidgetHost()); 1230 view->GetRenderWidgetHost());
1222 1231
1223 host->UpdateVSyncParameters( 1232 host->UpdateVSyncParameters(
1224 base::TimeTicks::FromInternalValue(timebase_micros), 1233 base::TimeTicks::FromInternalValue(timebase_micros),
1225 base::TimeDelta::FromMicroseconds(interval_micros)); 1234 base::TimeDelta::FromMicroseconds(interval_micros));
1235
1236 vsync_interval_ =
1237 base::TimeDelta::FromMicroseconds(interval_micros);
1238 expected_browser_composite_time_ =
1239 vsync_interval_ * kDefaultBrowserCompositeVSyncFraction;
1226 } 1240 }
1227 1241
1228 void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */, 1242 void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */,
1229 jlong frame_time_micros) { 1243 jlong frame_time_micros) {
1230 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1244 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
1231 if (!view) 1245 if (!view)
1232 return; 1246 return;
1233 1247
1248 base::TimeTicks frame_time =
1249 base::TimeTicks::FromInternalValue(frame_time_micros);
1250 base::TimeTicks display_time = frame_time + vsync_interval_;
1251 base::TimeTicks deadline = display_time - expected_browser_composite_time_;
1252
1234 view->SendBeginFrame( 1253 view->SendBeginFrame(
1235 base::TimeTicks::FromInternalValue(frame_time_micros)); 1254 cc::BeginFrameArgs::Create(frame_time, deadline, vsync_interval_));
1236 } 1255 }
1237 1256
1238 jboolean ContentViewCoreImpl::OnAnimate(JNIEnv* env, jobject /* obj */, 1257 jboolean ContentViewCoreImpl::OnAnimate(JNIEnv* env, jobject /* obj */,
1239 jlong frame_time_micros) { 1258 jlong frame_time_micros) {
1240 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid(); 1259 RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
1241 if (!view) 1260 if (!view)
1242 return false; 1261 return false;
1243 1262
1244 return view->Animate(base::TimeTicks::FromInternalValue(frame_time_micros)); 1263 return view->Animate(base::TimeTicks::FromInternalValue(frame_time_micros));
1245 } 1264 }
(...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after
1556 reinterpret_cast<ui::ViewAndroid*>(view_android), 1575 reinterpret_cast<ui::ViewAndroid*>(view_android),
1557 reinterpret_cast<ui::WindowAndroid*>(window_android)); 1576 reinterpret_cast<ui::WindowAndroid*>(window_android));
1558 return reinterpret_cast<jint>(view); 1577 return reinterpret_cast<jint>(view);
1559 } 1578 }
1560 1579
1561 bool RegisterContentViewCore(JNIEnv* env) { 1580 bool RegisterContentViewCore(JNIEnv* env) {
1562 return RegisterNativesImpl(env); 1581 return RegisterNativesImpl(env);
1563 } 1582 }
1564 1583
1565 } // namespace content 1584 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698