Index: ui/android/window_android.cc |
diff --git a/ui/android/window_android.cc b/ui/android/window_android.cc |
index 79472befe6973cb2f905d9ef992650f92122fd6a..cff32ba6f571def1c787cd219296027d86f1cbc8 100644 |
--- a/ui/android/window_android.cc |
+++ b/ui/android/window_android.cc |
@@ -10,10 +10,6 @@ |
#include "base/android/jni_string.h" |
#include "base/android/jni_weak_ref.h" |
#include "base/android/scoped_java_ref.h" |
-#include "base/auto_reset.h" |
-#include "base/observer_list.h" |
-#include "cc/output/begin_frame_args.h" |
-#include "cc/scheduler/begin_frame_source.h" |
#include "jni/WindowAndroid_jni.h" |
#include "ui/android/window_android_compositor.h" |
#include "ui/android/window_android_observer.h" |
@@ -25,97 +21,8 @@ |
using base::android::JavaRef; |
using base::android::ScopedJavaLocalRef; |
-class WindowAndroid::WindowBeginFrameSource : public cc::BeginFrameSource { |
- public: |
- explicit WindowBeginFrameSource(WindowAndroid* window) |
- : window_(window), |
- observer_count_(0), |
- in_on_vsync_(false) {} |
- ~WindowBeginFrameSource() override {} |
- |
- // cc::BeginFrameSource implementation. |
- void AddObserver(cc::BeginFrameObserver* obs) override; |
- void RemoveObserver(cc::BeginFrameObserver* obs) override; |
- void DidFinishFrame(cc::BeginFrameObserver* obs, |
- size_t remaining_frames) override {} |
- bool IsThrottled() const override { return true; } |
- |
- void OnVSync(base::TimeTicks frame_time, |
- base::TimeDelta vsync_period); |
- |
- private: |
- WindowAndroid* const window_; |
- base::ObserverList<cc::BeginFrameObserver> observers_; |
- int observer_count_; |
- cc::BeginFrameArgs last_begin_frame_args_; |
- bool in_on_vsync_; |
-}; |
- |
-void WindowAndroid::WindowBeginFrameSource::AddObserver( |
- cc::BeginFrameObserver* obs) { |
- DCHECK(obs); |
- DCHECK(!observers_.HasObserver(obs)); |
- |
- observers_.AddObserver(obs); |
- observer_count_++; |
- obs->OnBeginFrameSourcePausedChanged(false); |
- window_->SetNeedsBeginFrames(true); |
- |
- // Send a MISSED BeginFrame if possible and necessary. If an observer is added |
- // during OnVSync(), it will get a NORMAL BeginFrame from OnVSync() instead. |
- if (!in_on_vsync_ && last_begin_frame_args_.IsValid()) { |
- cc::BeginFrameArgs last_args = obs->LastUsedBeginFrameArgs(); |
- if (!last_args.IsValid() || |
- last_args.frame_time < last_begin_frame_args_.frame_time) { |
- last_begin_frame_args_.type = cc::BeginFrameArgs::MISSED; |
- // TODO(crbug.com/602485): A deadline doesn't make too much sense |
- // for a missed BeginFrame (the intention rather is 'immediately'), |
- // but currently the retro frame logic is very strict in discarding |
- // BeginFrames. |
- last_begin_frame_args_.deadline = |
- base::TimeTicks::Now() + last_begin_frame_args_.interval; |
- obs->OnBeginFrame(last_begin_frame_args_); |
- } |
- } |
-} |
- |
-void WindowAndroid::WindowBeginFrameSource::RemoveObserver( |
- cc::BeginFrameObserver* obs) { |
- DCHECK(obs); |
- DCHECK(observers_.HasObserver(obs)); |
- |
- observers_.RemoveObserver(obs); |
- observer_count_--; |
- if (observer_count_ <= 0) |
- window_->SetNeedsBeginFrames(false); |
-} |
- |
-void WindowAndroid::WindowBeginFrameSource::OnVSync( |
- base::TimeTicks frame_time, |
- base::TimeDelta vsync_period) { |
- // frame time is in the past, so give the next vsync period as the deadline. |
- base::TimeTicks deadline = frame_time + vsync_period; |
- last_begin_frame_args_ = |
- cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
- vsync_period, cc::BeginFrameArgs::NORMAL); |
- DCHECK(last_begin_frame_args_.IsValid()); |
- |
- // We support adding/removing observers during observer iteration through |
- // base::ObserverList. We also prevent observers that are added during |
- // observer iteration from receiving a MISSED BeginFrame by means of |
- // |in_on_vsync_| - they will receive the current NORMAL one during the |
- // iteration instead. Note that SynchronousCompositorBrowserFilter relies on |
- // this behavior. |
- base::AutoReset<bool> auto_reset(&in_on_vsync_, true); |
- for (auto& obs : observers_) |
- obs.OnBeginFrame(last_begin_frame_args_); |
-} |
- |
WindowAndroid::WindowAndroid(JNIEnv* env, jobject obj, int display_id) |
- : display_id_(display_id), |
- compositor_(NULL), |
- begin_frame_source_(new WindowBeginFrameSource(this)), |
- needs_begin_frames_(false) { |
+ : display_id_(display_id), compositor_(NULL) { |
java_window_.Reset(env, obj); |
} |
@@ -162,10 +69,6 @@ |
observer_list_.RemoveObserver(observer); |
} |
-cc::BeginFrameSource* WindowAndroid::GetBeginFrameSource() { |
- return begin_frame_source_.get(); |
-} |
- |
void WindowAndroid::AttachCompositor(WindowAndroidCompositor* compositor) { |
if (compositor_ && compositor != compositor_) |
DetachCompositor(); |
@@ -187,15 +90,6 @@ |
Java_WindowAndroid_requestVSyncUpdate(env, GetJavaObject()); |
} |
-void WindowAndroid::SetNeedsBeginFrames(bool needs_begin_frames) { |
- if (needs_begin_frames_ == needs_begin_frames) |
- return; |
- |
- needs_begin_frames_ = needs_begin_frames; |
- if (needs_begin_frames_) |
- RequestVSyncUpdate(); |
-} |
- |
void WindowAndroid::SetNeedsAnimate() { |
if (compositor_) |
compositor_->SetNeedsAnimate(); |
@@ -213,9 +107,10 @@ |
base::TimeTicks frame_time(base::TimeTicks::FromInternalValue(time_micros)); |
base::TimeDelta vsync_period( |
base::TimeDelta::FromMicroseconds(period_micros)); |
- begin_frame_source_->OnVSync(frame_time, vsync_period); |
- if (needs_begin_frames_) |
- RequestVSyncUpdate(); |
+ for (WindowAndroidObserver& observer : observer_list_) |
+ observer.OnVSync(frame_time, vsync_period); |
+ if (compositor_) |
+ compositor_->OnVSync(frame_time, vsync_period); |
} |
void WindowAndroid::OnVisibilityChanged(JNIEnv* env, |