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

Side by Side Diff: remoting/client/display/gl_cursor.cc

Issue 2623413004: [Remoting Android] Fix thread issue with OpenGL drawable (Closed)
Patch Set: PTAL Point 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 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 #include "remoting/client/display/gl_cursor.h" 5 #include "remoting/client/display/gl_cursor.h"
6 6
7 #include "remoting/base/util.h" 7 #include "remoting/base/util.h"
8 #include "remoting/client/display/gl_canvas.h" 8 #include "remoting/client/display/gl_canvas.h"
9 #include "remoting/client/display/gl_math.h" 9 #include "remoting/client/display/gl_math.h"
10 #include "remoting/client/display/gl_render_layer.h" 10 #include "remoting/client/display/gl_render_layer.h"
11 #include "remoting/client/display/gl_texture_ids.h" 11 #include "remoting/client/display/gl_texture_ids.h"
12 #include "remoting/proto/control.pb.h" 12 #include "remoting/proto/control.pb.h"
13 #include "third_party/libyuv/include/libyuv/convert_argb.h" 13 #include "third_party/libyuv/include/libyuv/convert_argb.h"
14 14
15 namespace remoting { 15 namespace remoting {
16 16
17 namespace { 17 namespace {
18 const int kDefaultCursorDataSize = 32 * 32 * GlRenderLayer::kBytesPerPixel; 18 const int kDefaultCursorDataSize = 32 * 32 * GlRenderLayer::kBytesPerPixel;
19 } // namespace 19 } // namespace
20 20
21 GlCursor::GlCursor() : weak_factory_(this) {} 21 GlCursor::GlCursor() : weak_factory_(this) {
22 weak_ptr_ = weak_factory_.GetWeakPtr();
Sergey Ulanov 2017/01/13 02:03:10 With the current implementation of WeakFactory to
23 }
22 24
23 GlCursor::~GlCursor() {} 25 GlCursor::~GlCursor() {}
24 26
25 void GlCursor::SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) { 27 void GlCursor::SetCursorShape(const protocol::CursorShapeInfo& cursor_shape) {
26 int data_size = cursor_shape.width() * cursor_shape.height() * 28 int data_size = cursor_shape.width() * cursor_shape.height() *
27 GlRenderLayer::kBytesPerPixel; 29 GlRenderLayer::kBytesPerPixel;
28 if (current_cursor_data_size_ < data_size) { 30 if (current_cursor_data_size_ < data_size) {
29 current_cursor_data_size_ = 31 current_cursor_data_size_ =
30 kDefaultCursorDataSize > data_size ? kDefaultCursorDataSize : data_size; 32 kDefaultCursorDataSize > data_size ? kDefaultCursorDataSize : data_size;
31 current_cursor_data_.reset(new uint8_t[current_cursor_data_size_]); 33 current_cursor_data_.reset(new uint8_t[current_cursor_data_size_]);
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 return; 76 return;
75 } 77 }
76 layer_.reset(new GlRenderLayer(kGlCursorTextureId, canvas)); 78 layer_.reset(new GlRenderLayer(kGlCursorTextureId, canvas));
77 if (current_cursor_data_) { 79 if (current_cursor_data_) {
78 SetCurrentCursorShape(true); 80 SetCurrentCursorShape(true);
79 } 81 }
80 SetCursorPosition(cursor_x_, cursor_y_); 82 SetCursorPosition(cursor_x_, cursor_y_);
81 } 83 }
82 84
83 bool GlCursor::Draw() { 85 bool GlCursor::Draw() {
84 DCHECK(thread_checker_.CalledOnValidThread());
85 if (layer_ && current_cursor_data_ && visible_) { 86 if (layer_ && current_cursor_data_ && visible_) {
86 layer_->Draw(1.f); 87 layer_->Draw(1.f);
87 } 88 }
88 return false; 89 return false;
89 } 90 }
90 91
91 int GlCursor::GetZIndex() { 92 int GlCursor::GetZIndex() {
92 return Drawable::ZIndex::CURSOR; 93 return Drawable::ZIndex::CURSOR;
93 } 94 }
94 95
95 void GlCursor::SetCurrentCursorShape(bool size_changed) { 96 void GlCursor::SetCurrentCursorShape(bool size_changed) {
96 if (layer_) { 97 if (layer_) {
97 if (size_changed) { 98 if (size_changed) {
98 layer_->SetTexture(current_cursor_data_.get(), current_cursor_width_, 99 layer_->SetTexture(current_cursor_data_.get(), current_cursor_width_,
99 current_cursor_height_, 0); 100 current_cursor_height_, 0);
100 } else { 101 } else {
101 layer_->UpdateTexture(current_cursor_data_.get(), 0, 0, 102 layer_->UpdateTexture(current_cursor_data_.get(), 0, 0,
102 current_cursor_width_, current_cursor_width_, 0); 103 current_cursor_width_, current_cursor_width_, 0);
103 } 104 }
104 } 105 }
105 } 106 }
106 107
107 base::WeakPtr<Drawable> GlCursor::GetWeakPtr() { 108 base::WeakPtr<Drawable> GlCursor::GetWeakPtr() {
Sergey Ulanov 2017/01/13 02:03:10 Does this function really need to be thread-safe?
nicholss 2017/01/13 16:45:00 I think in the future it will be accessed via many
108 DCHECK(thread_checker_.CalledOnValidThread()); 109 return weak_ptr_;
109 return weak_factory_.GetWeakPtr();
110 } 110 }
111 111
112 } // namespace remoting 112 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698