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

Side by Side Diff: remoting/host/screen_recorder.h

Issue 6282006: Add a done task to ScreenRecorder::Stop() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ready now Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef REMOTING_HOST_SCREEN_RECORDER_H_ 5 #ifndef REMOTING_HOST_SCREEN_RECORDER_H_
6 #define REMOTING_HOST_SCREEN_RECORDER_H_ 6 #define REMOTING_HOST_SCREEN_RECORDER_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 MessageLoop* encode_loop, 69 MessageLoop* encode_loop,
70 MessageLoop* network_loop, 70 MessageLoop* network_loop,
71 Capturer* capturer, 71 Capturer* capturer,
72 Encoder* encoder); 72 Encoder* encoder);
73 73
74 virtual ~ScreenRecorder(); 74 virtual ~ScreenRecorder();
75 75
76 // Start recording. 76 // Start recording.
77 void Start(); 77 void Start();
78 78
79 // Pause the recording session. 79 // Stop the recording session. |task| is executed when recording is fully
80 void Pause(); 80 // stopped. This object cannot be used again after |task| is executed.
81 void Stop(Task* task);
Sergey Ulanov 2011/01/20 19:14:17 I think we should call it |done_task|, or |done|,
Alpha Left Google 2011/01/20 19:32:08 Done.
81 82
82 // Set the maximum capture rate. This is denoted by number of updates 83 // Set the maximum capture rate. This is denoted by number of updates
83 // in one second. The actual system may run in a slower rate than the maximum 84 // in one second. The actual system may run in a slower rate than the maximum
84 // rate due to various factors, e.g. capture speed, encode speed and network 85 // rate due to various factors, e.g. capture speed, encode speed and network
85 // conditions. 86 // conditions.
86 // This method should be called before Start() is called. 87 // This method should be called before Start() is called.
87 void SetMaxRate(double rate); 88 void SetMaxRate(double rate);
88 89
89 // Add a connection to this recording session. 90 // Add a connection to this recording session.
90 void AddConnection(scoped_refptr<protocol::ConnectionToClient> connection); 91 void AddConnection(scoped_refptr<protocol::ConnectionToClient> connection);
91 92
92 // Remove a connection from receiving screen updates. 93 // Remove a connection from receiving screen updates.
93 void RemoveConnection(scoped_refptr<protocol::ConnectionToClient> connection); 94 void RemoveConnection(scoped_refptr<protocol::ConnectionToClient> connection);
94 95
95 // Remove all connections. 96 // Remove all connections.
96 void RemoveAllConnections(); 97 void RemoveAllConnections();
97 98
98 private: 99 private:
99 // Getters for capturer and encoder. 100 // Getters for capturer and encoder.
100 Capturer* capturer(); 101 Capturer* capturer();
101 Encoder* encoder(); 102 Encoder* encoder();
102 103
103 // Capturer thread ---------------------------------------------------------- 104 // Capturer thread ----------------------------------------------------------
104 105
105 void DoStart(); 106 void DoStart();
106 void DoPause(); 107 void DoStop(Task* task);
108 void DoCompleteStop(Task* task);
107 109
108 void DoSetMaxRate(double max_rate); 110 void DoSetMaxRate(double max_rate);
109 111
110 // Hepler method to schedule next capture using the current rate. 112 // Hepler method to schedule next capture using the current rate.
111 void StartCaptureTimer(); 113 void StartCaptureTimer();
112 114
113 void DoCapture(); 115 void DoCapture();
114 void CaptureDoneCallback(scoped_refptr<CaptureData> capture_data); 116 void CaptureDoneCallback(scoped_refptr<CaptureData> capture_data);
115 void DoFinishSend(); 117 void DoFinishOneRecording();
116 118
117 // Network thread ----------------------------------------------------------- 119 // Network thread -----------------------------------------------------------
118 120
119 // DoSendVideoPacket takes ownership of the |packet| and is responsible 121 // DoSendVideoPacket takes ownership of the |packet| and is responsible
120 // for deleting it. 122 // for deleting it.
121 void DoSendVideoPacket(VideoPacket* packet); 123 void DoSendVideoPacket(VideoPacket* packet);
122 124
123 void DoSendInit(scoped_refptr<protocol::ConnectionToClient> connection, 125 void DoSendInit(scoped_refptr<protocol::ConnectionToClient> connection,
124 int width, int height); 126 int width, int height);
125 127
126 void DoAddConnection(scoped_refptr<protocol::ConnectionToClient> connection); 128 void DoAddConnection(scoped_refptr<protocol::ConnectionToClient> connection);
127 void DoRemoveClient(scoped_refptr<protocol::ConnectionToClient> connection); 129 void DoRemoveClient(scoped_refptr<protocol::ConnectionToClient> connection);
128 void DoRemoveAllClients(); 130 void DoRemoveAllClients();
129 131
132 // Signal network thread to cease activities.
133 void DoStopOnNetworkThread(Task* task);
134
130 // Callback for the last packet in one update. Deletes |packet| and 135 // Callback for the last packet in one update. Deletes |packet| and
131 // schedules next screen capture. 136 // schedules next screen capture.
132 void OnFrameSent(VideoPacket* packet); 137 void FrameSentCallback(VideoPacket* packet);
133 138
134 // Encoder thread ----------------------------------------------------------- 139 // Encoder thread -----------------------------------------------------------
135 140
136 void DoEncode(scoped_refptr<CaptureData> capture_data); 141 void DoEncode(scoped_refptr<CaptureData> capture_data);
137 142
138 // EncodeDataAvailableTask takes ownership of |packet|. 143 // Perform stop operations on encode thread.
139 void EncodeDataAvailableTask(VideoPacket* packet); 144 void DoStopOnEncodeThread(Task* task);
145
146 // EncodedDataAvailableCallback takes ownership of |packet|.
147 void EncodedDataAvailableCallback(VideoPacket* packet);
140 void SendVideoPacket(VideoPacket* packet); 148 void SendVideoPacket(VideoPacket* packet);
141 149
142 // Message loops used by this class. 150 // Message loops used by this class.
143 MessageLoop* capture_loop_; 151 MessageLoop* capture_loop_;
144 MessageLoop* encode_loop_; 152 MessageLoop* encode_loop_;
145 MessageLoop* network_loop_; 153 MessageLoop* network_loop_;
146 154
147 // Reference to the capturer. This member is always accessed on the capture 155 // Reference to the capturer. This member is always accessed on the capture
148 // thread. 156 // thread.
149 scoped_ptr<Capturer> capturer_; 157 scoped_ptr<Capturer> capturer_;
150 158
151 // Reference to the encoder. This member is always accessed on the encode 159 // Reference to the encoder. This member is always accessed on the encode
152 // thread. 160 // thread.
153 scoped_ptr<Encoder> encoder_; 161 scoped_ptr<Encoder> encoder_;
154 162
155 // A list of clients connected to this hosts. 163 // A list of clients connected to this hosts.
156 // This member is always accessed on the NETWORK thread. 164 // This member is always accessed on the NETWORK thread.
157 // TODO(hclam): Have to scoped_refptr the clients since they have a shorter 165 // TODO(hclam): Have to scoped_refptr the clients since they have a shorter
158 // lifetime than this object. 166 // lifetime than this object.
159 typedef std::vector<scoped_refptr<protocol::ConnectionToClient> > 167 typedef std::vector<scoped_refptr<protocol::ConnectionToClient> >
160 ConnectionToClientList; 168 ConnectionToClientList;
161 ConnectionToClientList connections_; 169 ConnectionToClientList connections_;
162 170
163 // The following members are accessed on the capture thread. 171 // Flag that indicates recording has been started.
164 bool started_; 172 bool started_;
165 173
174 // Flag that indicates network is being stopped.
175 bool network_stopped_;
176
166 // Timer that calls DoCapture. 177 // Timer that calls DoCapture.
167 base::RepeatingTimer<ScreenRecorder> capture_timer_; 178 base::RepeatingTimer<ScreenRecorder> capture_timer_;
168 179
169 // Count the number of recordings (i.e. capture or encode) happening. 180 // Count the number of recordings (i.e. capture or encode) happening.
170 int recordings_; 181 int recordings_;
171 182
172 // Set to true if we've skipped last capture because there are too 183 // Set to true if we've skipped last capture because there are too
173 // many pending frames. 184 // many pending frames.
174 int frame_skipped_; 185 int frame_skipped_;
175 186
176 // Number of captures to perform every second. Written on the capture thread. 187 // Number of captures to perform every second. Written on the capture thread.
177 double max_rate_; 188 double max_rate_;
178 189
179 DISALLOW_COPY_AND_ASSIGN(ScreenRecorder); 190 DISALLOW_COPY_AND_ASSIGN(ScreenRecorder);
180 }; 191 };
181 192
182 } // namespace remoting 193 } // namespace remoting
183 194
184 #endif // REMOTING_HOST_SCREEN_RECORDER_H_ 195 #endif // REMOTING_HOST_SCREEN_RECORDER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698