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

Unified Diff: remoting/client/display/gl_renderer.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 side-by-side diff with in-line comments
Download patch
Index: remoting/client/display/gl_renderer.cc
diff --git a/remoting/client/display/gl_renderer.cc b/remoting/client/display/gl_renderer.cc
index 8b2ee234a8dbae570d56f5e88bc5b4864c942e95..e88c3af8f05c99cf9fdc464bf2b5bc1673d2f559 100644
--- a/remoting/client/display/gl_renderer.cc
+++ b/remoting/client/display/gl_renderer.cc
@@ -20,8 +20,8 @@ namespace remoting {
namespace {
-bool CompareDrawableZOrder(base::WeakPtr<Drawable> a,
- base::WeakPtr<Drawable> b) {
+template <typename DrawablePtr>
nicholss 2017/01/13 16:45:01 I don't understand why this is better.
+bool CompareDrawableZOrder(DrawablePtr a, DrawablePtr b) {
return a->GetZIndex() < b->GetZIndex();
}
@@ -131,6 +131,19 @@ base::WeakPtr<GlRenderer> GlRenderer::GetWeakPtr() {
return weak_ptr_;
}
+// static
+std::unique_ptr<GlRenderer> GlRenderer::CreateGlRendererWithDesktop() {
Sergey Ulanov 2017/01/13 02:03:10 This code looks weird. If the GlRenderer owns all
Yuwei 2017/01/13 02:21:08 That's exactly what I plan to do.
joedow 2017/01/13 16:09:34 To my knowledge Scott is actively working on this
nicholss 2017/01/13 16:45:01 This is close to what the plan is. A single object
+ std::unique_ptr<GlRenderer> renderer(new GlRenderer());
+ std::vector<Drawable*> drawables{&renderer->desktop_, &renderer->cursor_,
+ &renderer->cursor_feedback_};
+ std::sort(drawables.begin(), drawables.end(),
Sergey Ulanov 2017/01/13 02:03:10 This is way more complicated than necessary. We ha
nicholss 2017/01/13 16:45:01 that is if you assume nothing can be added or remo
+ CompareDrawableZOrder<Drawable*>);
+ for (auto* drawable : drawables) {
nicholss 2017/01/13 16:45:01 Why would you sort them, they are going to be sort
+ renderer->drawables_.push_back(drawable->GetWeakPtr());
+ }
+ return renderer;
+}
+
void GlRenderer::RequestRender() {
DCHECK(thread_checker_.CalledOnValidThread());
if (render_scheduled_) {
@@ -142,9 +155,11 @@ void GlRenderer::RequestRender() {
}
void GlRenderer::AddDrawable(base::WeakPtr<Drawable> drawable) {
Sergey Ulanov 2017/01/13 02:03:10 Is this function still used anywhere?
Yuwei 2017/01/13 02:21:08 I think the unit test is still using it. Also IIRC
nicholss 2017/01/13 16:45:01 This method is the entire point of my last commit.
+ DCHECK(thread_checker_.CalledOnValidThread());
drawable->SetCanvas(canvas_ ? canvas_->GetWeakPtr() : nullptr);
drawables_.push_back(drawable);
- std::sort(drawables_.begin(), drawables_.end(), CompareDrawableZOrder);
+ std::sort(drawables_.begin(), drawables_.end(),
+ CompareDrawableZOrder<base::WeakPtr<Drawable>>);
}
void GlRenderer::OnRender() {
@@ -172,12 +187,4 @@ void GlRenderer::OnRender() {
}
}
-std::unique_ptr<GlRenderer> GlRenderer::CreateGlRendererWithDesktop() {
nicholss 2017/01/13 16:45:01 I think it is a mistake to remove this and use the
- std::unique_ptr<GlRenderer> renderer(new GlRenderer());
- renderer->AddDrawable(renderer->desktop_.GetWeakPtr());
- renderer->AddDrawable(renderer->cursor_.GetWeakPtr());
- renderer->AddDrawable(renderer->cursor_feedback_.GetWeakPtr());
- return renderer;
-}
-
} // namespace remoting
« remoting/client/display/gl_cursor.cc ('K') | « remoting/client/display/gl_desktop.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698