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

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

Issue 2829018: Fix thread usage in chromoting host (Closed)
Patch Set: removed useless test Created 10 years, 5 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 | « remoting/host/encoder_verbatim.cc ('k') | remoting/host/session_manager.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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_RECORD_SESSION_H_ 5 #ifndef REMOTING_HOST_RECORD_SESSION_H_
6 #define REMOTING_HOST_RECORD_SESSION_H_ 6 #define REMOTING_HOST_RECORD_SESSION_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // v 60 // v
61 // 61 //
62 // SessionManager has the following responsibilities: 62 // SessionManager has the following responsibilities:
63 // 1. Make sure capture and encode occurs no more frequently than |rate|. 63 // 1. Make sure capture and encode occurs no more frequently than |rate|.
64 // 2. Make sure there is at most one outstanding capture not being encoded. 64 // 2. Make sure there is at most one outstanding capture not being encoded.
65 // 3. Distribute tasks on three threads on a timely fashion to minimize latency. 65 // 3. Distribute tasks on three threads on a timely fashion to minimize latency.
66 class SessionManager : public base::RefCountedThreadSafe<SessionManager> { 66 class SessionManager : public base::RefCountedThreadSafe<SessionManager> {
67 public: 67 public:
68 68
69 // Construct a SessionManager. Message loops and threads are provided. 69 // Construct a SessionManager. Message loops and threads are provided.
70 // Ownership of Capturer and Encoder are given to this object. 70 // This object does not own capturer and encoder.
71 SessionManager(MessageLoop* capture_loop, 71 SessionManager(MessageLoop* capture_loop,
72 MessageLoop* encode_loop, 72 MessageLoop* encode_loop,
73 MessageLoop* network_loop, 73 MessageLoop* network_loop,
74 Capturer* capturer, 74 Capturer* capturer,
75 Encoder* encoder); 75 Encoder* encoder);
76 76
77 virtual ~SessionManager(); 77 virtual ~SessionManager();
78 78
79 // Start recording. 79 // Start recording.
80 void Start(); 80 void Start();
81 81
82 // Pause the recording session. 82 // Pause the recording session.
83 void Pause(); 83 void Pause();
84 84
85 // Set the maximum capture rate. This is denoted by number of updates 85 // Set the maximum capture rate. This is denoted by number of updates
86 // in one second. The actual system may run in a slower rate than the maximum 86 // in one second. The actual system may run in a slower rate than the maximum
87 // rate due to various factors, e.g. capture speed, encode speed and network 87 // rate due to various factors, e.g. capture speed, encode speed and network
88 // conditions. 88 // conditions.
89 // This method should be called before Start() is called. 89 // This method should be called before Start() is called.
90 void SetMaxRate(double rate); 90 void SetMaxRate(double rate);
91 91
92 // Add a client to this recording session. 92 // Add a client to this recording session.
93 void AddClient(scoped_refptr<ClientConnection> client); 93 void AddClient(scoped_refptr<ClientConnection> client);
94 94
95 // Remove a client from receiving screen updates. 95 // Remove a client from receiving screen updates.
96 void RemoveClient(scoped_refptr<ClientConnection> client); 96 void RemoveClient(scoped_refptr<ClientConnection> client);
97 97
98 // Remove all clients.
99 void RemoveAllClients();
100
98 private: 101 private:
99 102
100 // Stores the data and information of a capture to pass off to the 103 // Stores the data and information of a capture to pass off to the
101 // encoding thread. 104 // encoding thread.
102 struct CaptureData { 105 struct CaptureData {
103 DirtyRects dirty_rects_; 106 DirtyRects dirty_rects_;
104 const uint8* data_[3]; 107 const uint8* data_[3];
105 int data_strides_[3]; 108 int data_strides_[3];
106 int width_; 109 int width_;
107 int height_; 110 int height_;
(...skipping 15 matching lines...) Expand all
123 void DoSendUpdate(const UpdateStreamPacketHeader* header, 126 void DoSendUpdate(const UpdateStreamPacketHeader* header,
124 const scoped_refptr<media::DataBuffer> data, 127 const scoped_refptr<media::DataBuffer> data,
125 Encoder::EncodingState state); 128 Encoder::EncodingState state);
126 void DoSendInit(scoped_refptr<ClientConnection> client, 129 void DoSendInit(scoped_refptr<ClientConnection> client,
127 int width, int height); 130 int width, int height);
128 void DoGetInitInfo(scoped_refptr<ClientConnection> client); 131 void DoGetInitInfo(scoped_refptr<ClientConnection> client);
129 void DoSetRate(double rate); 132 void DoSetRate(double rate);
130 void DoSetMaxRate(double max_rate); 133 void DoSetMaxRate(double max_rate);
131 void DoAddClient(scoped_refptr<ClientConnection> client); 134 void DoAddClient(scoped_refptr<ClientConnection> client);
132 void DoRemoveClient(scoped_refptr<ClientConnection> client); 135 void DoRemoveClient(scoped_refptr<ClientConnection> client);
136 void DoRemoveAllClients();
133 void DoRateControl(); 137 void DoRateControl();
134 138
135 // Hepler method to schedule next capture using the current rate. 139 // Hepler method to schedule next capture using the current rate.
136 void ScheduleNextCapture(); 140 void ScheduleNextCapture();
137 141
138 // Helper method to schedule next rate regulation task. 142 // Helper method to schedule next rate regulation task.
139 void ScheduleNextRateControl(); 143 void ScheduleNextRateControl();
140 144
141 void CaptureDoneTask(); 145 void CaptureDoneTask();
142 // EncodeDataAvailableTask takes ownership of header and is responsible for 146 // EncodeDataAvailableTask takes ownership of header and is responsible for
143 // deleting it. 147 // deleting it.
144 void EncodeDataAvailableTask(const UpdateStreamPacketHeader *header, 148 void EncodeDataAvailableTask(const UpdateStreamPacketHeader *header,
145 const scoped_refptr<media::DataBuffer>& data, 149 const scoped_refptr<media::DataBuffer>& data,
146 Encoder::EncodingState state); 150 Encoder::EncodingState state);
147 151
152 // Getters for capturer and encoder.
153 Capturer* capturer();
154 Encoder* encoder();
155
148 // Message loops used by this class. 156 // Message loops used by this class.
149 MessageLoop* capture_loop_; 157 MessageLoop* capture_loop_;
150 MessageLoop* encode_loop_; 158 MessageLoop* encode_loop_;
151 MessageLoop* network_loop_; 159 MessageLoop* network_loop_;
152 160
153 // Reference to the capturer. This member is always accessed on the capture 161 // Reference to the capturer. This member is always accessed on the capture
154 // thread. 162 // thread.
155 scoped_ptr<Capturer> capturer_; 163 scoped_ptr<Capturer> capturer_;
156 164
157 // Reference to the encoder. This member is always accessed on the encode 165 // Reference to the encoder. This member is always accessed on the encode
(...skipping 20 matching lines...) Expand all
178 186
179 // The following member is accessed on the network thread. 187 // The following member is accessed on the network thread.
180 bool rate_control_started_; 188 bool rate_control_started_;
181 189
182 DISALLOW_COPY_AND_ASSIGN(SessionManager); 190 DISALLOW_COPY_AND_ASSIGN(SessionManager);
183 }; 191 };
184 192
185 } // namespace remoting 193 } // namespace remoting
186 194
187 #endif // REMOTING_HOST_RECORD_SESSION_H_ 195 #endif // REMOTING_HOST_RECORD_SESSION_H_
OLDNEW
« no previous file with comments | « remoting/host/encoder_verbatim.cc ('k') | remoting/host/session_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698