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

Unified Diff: content/browser/android/synchronous_compositor_observer.h

Issue 2418383002: sync compositor: Signal async frame on IO thread (Closed)
Patch Set: bad_message, and minor cleanups Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/android/synchronous_compositor_observer.h
diff --git a/content/browser/android/synchronous_compositor_observer.h b/content/browser/android/synchronous_compositor_observer.h
index 864df1645be9736343bd3e066d95edf867f86073..f623a748b2398209f6f86d25d52b270b1d1ded8f 100644
--- a/content/browser/android/synchronous_compositor_observer.h
+++ b/content/browser/android/synchronous_compositor_observer.h
@@ -8,7 +8,9 @@
#include <vector>
#include "base/macros.h"
-#include "content/public/browser/render_process_host_observer.h"
+#include "base/synchronization/lock.h"
+#include "content/public/browser/android/synchronous_compositor.h"
+#include "content/public/browser/browser_message_filter.h"
#include "ui/android/window_android_observer.h"
namespace ui {
@@ -17,17 +19,14 @@ class WindowAndroid;
namespace content {
+class RenderProcessHost;
class SynchronousCompositorHost;
-// SynchronousCompositor class that's tied to the lifetime of a
-// RenderProcessHost. Responsible for its own lifetime.
-class SynchronousCompositorObserver : public RenderProcessHostObserver,
- public ui::WindowAndroidObserver {
+// TODO(boliu): Rename this to SynchronousCompositorFilter.
+class SynchronousCompositorObserver : public ui::WindowAndroidObserver,
+ public BrowserMessageFilter {
public:
- static SynchronousCompositorObserver* GetOrCreateFor(int process_id);
-
- // RenderProcessHostObserver overrides.
- void RenderProcessHostDestroyed(RenderProcessHost* host) override;
+ explicit SynchronousCompositorObserver(int process_id);
// WindowAndroidObserver overrides.
void OnCompositingDidCommit() override;
@@ -39,13 +38,20 @@ class SynchronousCompositorObserver : public RenderProcessHostObserver,
void OnActivityStopped() override;
void OnActivityStarted() override;
+ // BrowserMessageFilter overrides.
+ bool OnMessageReceived(const IPC::Message& message) override;
+
void SyncStateAfterVSync(ui::WindowAndroid* window_android,
SynchronousCompositorHost* compositor_host);
+ void SetFrameFuture(
+ const int routing_id,
dcheng 2016/10/21 06:42:56 Nit: usually const int, etc don't have a lot of me
boliu 2016/10/21 15:15:32 Done.
+ const scoped_refptr<SynchronousCompositor::FrameFuture>& frame_future);
dcheng 2016/10/21 06:42:56 Nit: scoped_refptr<> frame_future
boliu 2016/10/21 15:15:32 Done.
private:
- explicit SynchronousCompositorObserver(int process_id);
~SynchronousCompositorObserver() override;
+ bool ReceiveFrame(const IPC::Message& message);
+
RenderProcessHost* const render_process_host_;
// For synchronizing renderer state after a vsync.
@@ -53,6 +59,11 @@ class SynchronousCompositorObserver : public RenderProcessHostObserver,
std::vector<SynchronousCompositorHost*>
compositor_host_pending_renderer_state_;
+ base::Lock future_map_lock_; // Protects |future_map_|.
+ using FrameFutureMap =
+ std::map<int, scoped_refptr<SynchronousCompositor::FrameFuture>>;
+ FrameFutureMap future_map_;
+
DISALLOW_COPY_AND_ASSIGN(SynchronousCompositorObserver);
};

Powered by Google App Engine
This is Rietveld 408576698