Chromium Code Reviews| Index: content/browser/android/content_view_core_impl.cc |
| diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc |
| index 846fa91fa4f556f337001426f127655ccbcfd78d..d01ddde919a407aa5e03d4a69ccfae527221b972 100644 |
| --- a/content/browser/android/content_view_core_impl.cc |
| +++ b/content/browser/android/content_view_core_impl.cc |
| @@ -14,6 +14,7 @@ |
| #include "base/strings/utf_string_conversions.h" |
| #include "base/values.h" |
| #include "cc/layers/layer.h" |
| +#include "cc/output/begin_frame_args.h" |
| #include "content/browser/android/interstitial_page_delegate_android.h" |
| #include "content/browser/android/load_url_params.h" |
| #include "content/browser/android/media_player_manager_impl.h" |
| @@ -77,6 +78,10 @@ namespace content { |
| namespace { |
| +const unsigned int kDefaultVSyncIntervalMicros = 16666u; |
| +// TODO(brianderson): Use adaptive draw-time estimation. |
| +const float kDefaultBrowserCompositeVSyncFraction = 1.0f / 3; |
| + |
| const void* kContentViewUserDataKey = &kContentViewUserDataKey; |
| int GetRenderProcessIdFromRenderViewHost(RenderViewHost* host) { |
| @@ -158,6 +163,10 @@ ContentViewCoreImpl::ContentViewCoreImpl(JNIEnv* env, jobject obj, |
| web_contents_(static_cast<WebContentsImpl*>(web_contents)), |
| root_layer_(cc::Layer::Create()), |
| tab_crashed_(false), |
| + vsync_interval_(base::TimeDelta::FromMicroseconds( |
| + kDefaultVSyncIntervalMicros)), |
| + expected_browser_composite_time_(base::TimeDelta::FromMicroseconds( |
| + kDefaultVSyncIntervalMicros * kDefaultBrowserCompositeVSyncFraction)), |
| view_android_(view_android), |
| window_android_(window_android) { |
| CHECK(web_contents) << |
| @@ -701,7 +710,7 @@ void ContentViewCoreImpl::LoadUrl( |
| tab_crashed_ = false; |
| } |
| -void ContentViewCoreImpl::SetVSyncNotificationEnabled(bool enabled) { |
| +void ContentViewCoreImpl::SetNeedsBeginFrame(bool enabled) { |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| if (obj.is_null()) |
| @@ -1223,6 +1232,11 @@ void ContentViewCoreImpl::UpdateVSyncParameters(JNIEnv* env, jobject /* obj */, |
| host->UpdateVSyncParameters( |
| base::TimeTicks::FromInternalValue(timebase_micros), |
| base::TimeDelta::FromMicroseconds(interval_micros)); |
| + |
|
no sievers
2013/06/13 01:17:47
Is this function still getting called with begin f
Sami
2013/06/13 10:01:07
Yes, we call when attaching the view for the first
brianderson
2013/06/14 20:12:02
It is also called now when we did not draw after a
|
| + vsync_interval_ = |
| + base::TimeDelta::FromMicroseconds(interval_micros); |
| + expected_browser_composite_time_ = |
| + vsync_interval_ * kDefaultBrowserCompositeVSyncFraction; |
| } |
| void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */, |
| @@ -1231,8 +1245,14 @@ void ContentViewCoreImpl::OnVSync(JNIEnv* env, jobject /* obj */, |
| if (!view) |
| return; |
| + base::TimeTicks frame_time = |
| + base::TimeTicks::FromInternalValue(frame_time_micros); |
| + base::TimeTicks display_time = frame_time + vsync_interval_; |
| + base::TimeTicks deadline = display_time - expected_browser_composite_time_; |
| + |
| view->SendBeginFrame( |
| - base::TimeTicks::FromInternalValue(frame_time_micros)); |
| + cc::BeginFrameArgs::CreateBeginFrame( |
| + frame_time, deadline, vsync_interval_)); |
| } |
| jboolean ContentViewCoreImpl::OnAnimate(JNIEnv* env, jobject /* obj */, |