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

Unified Diff: ui/android/window_android.cc

Issue 2585993002: Revert of [android] Make RWHVAndroid a BeginFrameObserver. (Closed)
Patch Set: Created 4 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/android/window_android.h ('k') | ui/android/window_android_compositor.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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,
« no previous file with comments | « ui/android/window_android.h ('k') | ui/android/window_android_compositor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698