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

Side by Side Diff: content/browser/compositor/reflector_impl.h

Issue 846063002: compositor: Fix texture flipping for SW mirroring with surfaceless (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: add tests Created 5 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_ 5 #ifndef CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_
6 #define CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_ 6 #define CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_
7 7
8 #include "base/id_map.h" 8 #include "base/id_map.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 // impl thread. 71 // impl thread.
72 void CreateSharedTextureOnMainThread(gfx::Size size); 72 void CreateSharedTextureOnMainThread(gfx::Size size);
73 73
74 // Called when the source surface is bound and available. This must 74 // Called when the source surface is bound and available. This must
75 // be called on ImplThread. 75 // be called on ImplThread.
76 void OnSourceSurfaceReady(BrowserCompositorOutputSurface* surface); 76 void OnSourceSurfaceReady(BrowserCompositorOutputSurface* surface);
77 77
78 void DetachFromOutputSurface(); 78 void DetachFromOutputSurface();
79 79
80 private: 80 private:
81 friend class ReflectorImplTest;
82
81 struct MainThreadData { 83 struct MainThreadData {
82 MainThreadData(ui::Compositor* mirrored_compositor, 84 MainThreadData(ui::Compositor* mirrored_compositor,
83 ui::Layer* mirroring_layer); 85 ui::Layer* mirroring_layer);
84 ~MainThreadData(); 86 ~MainThreadData();
85 scoped_refptr<OwnedMailbox> mailbox; 87 scoped_refptr<OwnedMailbox> mailbox;
86 bool needs_set_mailbox; 88 bool needs_set_mailbox;
87 ui::Compositor* mirrored_compositor; 89 ui::Compositor* mirrored_compositor;
88 ui::Layer* mirroring_layer; 90 ui::Layer* mirroring_layer;
89 }; 91 };
90 92
(...skipping 12 matching lines...) Expand all
103 105
104 void AttachToOutputSurfaceOnImplThread( 106 void AttachToOutputSurfaceOnImplThread(
105 const gpu::MailboxHolder& mailbox_holder, 107 const gpu::MailboxHolder& mailbox_holder,
106 BrowserCompositorOutputSurface* surface); 108 BrowserCompositorOutputSurface* surface);
107 109
108 void UpdateTextureSizeOnMainThread(gfx::Size size); 110 void UpdateTextureSizeOnMainThread(gfx::Size size);
109 111
110 // Request full redraw on mirroring compositor. 112 // Request full redraw on mirroring compositor.
111 void FullRedrawOnMainThread(gfx::Size size); 113 void FullRedrawOnMainThread(gfx::Size size);
112 114
113 void UpdateSubBufferOnMainThread(gfx::Size size, gfx::Rect rect); 115 void UpdateSubBufferOnMainThread(const gfx::Size& size,
116 const gfx::Rect& rect);
114 117
115 // Request full redraw on mirrored compositor so that 118 // Request full redraw on mirrored compositor so that
116 // the full content will be copied to mirroring compositor. 119 // the full content will be copied to mirroring compositor.
117 void FullRedrawContentOnMainThread(); 120 void FullRedrawContentOnMainThread();
118 121
119 // This exists just to hold a reference to a ReflectorImpl in a post task, 122 // This exists just to hold a reference to a ReflectorImpl in a post task,
120 // so the ReflectorImpl gets deleted when the function returns. 123 // so the ReflectorImpl gets deleted when the function returns.
121 static void DeleteOnMainThread(scoped_refptr<ReflectorImpl> reflector) {} 124 static void DeleteOnMainThread(scoped_refptr<ReflectorImpl> reflector) {}
122 125
123 MainThreadData& GetMain(); 126 MainThreadData& GetMain();
124 ImplThreadData& GetImpl(); 127 ImplThreadData& GetImpl();
125 128
126 // Must be accessed only on ImplThread, through GetImpl(). 129 // Must be accessed only on ImplThread, through GetImpl().
127 ImplThreadData impl_unsafe_; 130 ImplThreadData impl_unsafe_;
128 131
129 // Must be accessed only on MainThread, through GetMain(). 132 // Must be accessed only on MainThread, through GetMain().
130 MainThreadData main_unsafe_; 133 MainThreadData main_unsafe_;
131 134
132 // Can be accessed on both. 135 // Can be accessed on both.
133 scoped_refptr<base::MessageLoopProxy> impl_message_loop_; 136 scoped_refptr<base::MessageLoopProxy> impl_message_loop_;
134 scoped_refptr<base::MessageLoopProxy> main_message_loop_; 137 scoped_refptr<base::MessageLoopProxy> main_message_loop_;
135 int surface_id_; 138 int surface_id_;
139 bool flip_texture_;
danakj 2015/01/22 01:04:20 Thanks for the test this looks nice except I think
achaulk 2015/01/23 16:45:52 Done.
136 }; 140 };
137 141
138 } // namespace content 142 } // namespace content
139 143
140 #endif // CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_ 144 #endif // CONTENT_BROWSER_COMPOSITOR_REFLECTOR_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698