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

Side by Side Diff: cc/blimp/synced_property_remote.h

Issue 2646623002: cc: Remove all blimp code from cc. (Closed)
Patch Set: test build Created 3 years, 11 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
« no previous file with comments | « cc/blimp/remote_compositor_bridge_client.h ('k') | cc/blimp/synced_property_remote_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CC_BLIMP_SYNCED_PROPERTY_REMOTE_H_
6 #define CC_BLIMP_SYNCED_PROPERTY_REMOTE_H_
7
8 #include "cc/base/synced_property.h"
9
10 namespace cc {
11
12 // This class is heavily inspired from SyncedProperty and is the equivalent of
13 // SyncedProperty for synchronizing state between the engine and client in
14 // remote mode. There are effectively 2 trees on the main thread, the LayerTree
15 // on the main thread on the engine, and the tree on the main thread on the
16 // client.
17 //
18 // The client main thread tree receives deltas from the impl thread, but must
19 // synchronize them with the engine main thread before applying them onto the
20 // the main thread associated state. At the same time there are different sets
21 // of deltas, the value that was received from the impl thread but has not yet
22 // been reported to the engine main thread, and the value that has been sent
23 // to the engine main thread, but a state update with the application of these
24 // deltas has not been received from the engine. The purpose of this class is to
25 // track these deltas for deciding what needs to be reported to the main thread
26 // on the engine, and providing the impl thread with the delta that it should
27 // apply to its associated state since it could not be reflected in the local
28 // BeginMainFrame on the client main thread.
29 //
30 // Instances of this class are held on the client main thread and have a 1:1
31 // mapping with their corresponding SyncedProperty instances.
32
33 // Note: This class currently supports only one set of deltas to be in flight to
34 // the engine.
35 template <typename T>
36 class SyncedPropertyRemote {
37 public:
38 SyncedPropertyRemote() = default;
39
40 SyncedPropertyRemote(SyncedPropertyRemote&& other) = default;
41
42 SyncedPropertyRemote& operator=(SyncedPropertyRemote&& other) = default;
43
44 // Push the main thread state from the engine onto the client main thread
45 // associated state.
46 void PushFromEngineMainThread(
47 typename T::ValueType engine_main_thread_value) {
48 engine_main_base_ = T(engine_main_thread_value);
49 }
50
51 // Called when an update for changes made on the impl thread was received on
52 // the client main thread.
53 // |main_thread_value| holds the updated value on the client main thread.
54 void UpdateDeltaFromImplThread(typename T::ValueType main_thread_value) {
55 T delta_from_impl_thread =
56 T(main_thread_value).InverseCombine(engine_main_base_);
57 unsent_delta_from_impl_thread_ =
58 unsent_delta_from_impl_thread_.Combine(delta_from_impl_thread);
59 }
60
61 // Pull deltas for changes tracked on the client main thread to be sent to the
62 // engine main thread.
63 // Each call to this must be followed with a call to DidApplySentDeltaOnEngine
64 // before another set of deltas can be pulled.
65 typename T::ValueType PullDeltaForEngineUpdate() {
66 DCHECK(sent_but_unapplied_delta_from_impl_thread_.get() ==
67 T::Identity().get());
68
69 T delta_to_send = unsent_delta_from_impl_thread_;
70 sent_but_unapplied_delta_from_impl_thread_ = delta_to_send;
71 unsent_delta_from_impl_thread_ = T::Identity();
72 return delta_to_send.get();
73 }
74
75 // Called when deltas sent to the engine were applied to the main thread state
76 // on the engine.
77 void DidApplySentDeltaOnEngine() {
78 // Pre-emptively apply the deltas that were sent. This is necessary since
79 // the engine may not send a frame update if the deltas were simply
80 // reflected back by the engine main thread (equivalent to
81 // BeginMainFrameAborted between the main and impl thread).
82 // If the engine did send a frame, we expect the frame to come with the ack
83 // for the deltas, so the value will be over-written with the engine update
84 // before being pushed to the impl thread.
85 engine_main_base_ =
86 engine_main_base_.Combine(sent_but_unapplied_delta_from_impl_thread_);
87 sent_but_unapplied_delta_from_impl_thread_ = T::Identity();
88 }
89
90 // Returns the delta that was reported to the main thread on the client but
91 // has not yet been applied to the main thread on the engine.
92 typename T::ValueType DeltaNotAppliedOnEngine() {
93 T total_delta_on_client = unsent_delta_from_impl_thread_.Combine(
94 sent_but_unapplied_delta_from_impl_thread_);
95 return total_delta_on_client.get();
96 }
97
98 typename T::ValueType EngineMain() { return engine_main_base_.get(); }
99
100 private:
101 // The delta that was applied to the state on the impl thread and received on
102 // the main thread on the client during BeginMainFrame, but has not yet been
103 // reported to the main thread on the engine.
104 T unsent_delta_from_impl_thread_;
105
106 // The delta that was applied to the state on the impl thread and has been
107 // sent to the main thread on the engine, but has not yet been applied to the
108 // main thread on the engine.
109 T sent_but_unapplied_delta_from_impl_thread_;
110
111 // The value as last received from the main thread on the engine. The value on
112 // the main thread state on the client should always be set to this value,
113 // outside of the interval when deltas from the impl thread are reported to
114 // the main thread on the client.
115 T engine_main_base_;
116
117 DISALLOW_COPY_AND_ASSIGN(SyncedPropertyRemote);
118 };
119
120 } // namespace cc
121
122 #endif // CC_BLIMP_SYNCED_PROPERTY_REMOTE_H_
OLDNEW
« no previous file with comments | « cc/blimp/remote_compositor_bridge_client.h ('k') | cc/blimp/synced_property_remote_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698