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

Side by Side Diff: cc/gl_renderer.cc

Issue 12545018: Move context-related callbacks into OutputSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: works Created 7 years, 9 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 2010 The Chromium Authors. All rights reserved. 1 // Copyright 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 #include "cc/gl_renderer.h" 5 #include "cc/gl_renderer.h"
6 6
7 #include <set> 7 #include <set>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 is_using_bind_uniform_(false), 103 is_using_bind_uniform_(false),
104 visible_(true), 104 visible_(true),
105 is_scissor_enabled_(false) { 105 is_scissor_enabled_(false) {
106 DCHECK(context_); 106 DCHECK(context_);
107 } 107 }
108 108
109 bool GLRenderer::Initialize() { 109 bool GLRenderer::Initialize() {
110 if (!context_->makeContextCurrent()) 110 if (!context_->makeContextCurrent())
111 return false; 111 return false;
112 112
113 context_->setContextLostCallback(this);
114 context_->pushGroupMarkerEXT("CompositorContext"); 113 context_->pushGroupMarkerEXT("CompositorContext");
115 114
116 std::string extensions_string = 115 std::string extensions_string =
117 UTF16ToASCII(context_->getString(GL_EXTENSIONS)); 116 UTF16ToASCII(context_->getString(GL_EXTENSIONS));
118 std::vector<std::string> extensions_list; 117 std::vector<std::string> extensions_list;
119 base::SplitString(extensions_string, ' ', &extensions_list); 118 base::SplitString(extensions_string, ' ', &extensions_list);
120 std::set<std::string> extensions(extensions_list.begin(), 119 std::set<std::string> extensions(extensions_list.begin(),
121 extensions_list.end()); 120 extensions_list.end());
122 121
123 if (Settings().acceleratePainting && 122 if (Settings().acceleratePainting &&
124 extensions.count("GL_EXT_texture_format_BGRA8888") && 123 extensions.count("GL_EXT_texture_format_BGRA8888") &&
125 extensions.count("GL_EXT_read_format_bgra")) 124 extensions.count("GL_EXT_read_format_bgra"))
126 capabilities_.using_accelerated_painting = true; 125 capabilities_.using_accelerated_painting = true;
127 else 126 else
128 capabilities_.using_accelerated_painting = false; 127 capabilities_.using_accelerated_painting = false;
129 128
130 capabilities_.using_partial_swap = 129 capabilities_.using_partial_swap =
131 Settings().partialSwapEnabled && 130 Settings().partialSwapEnabled &&
132 extensions.count("GL_CHROMIUM_post_sub_buffer"); 131 extensions.count("GL_CHROMIUM_post_sub_buffer");
133 132
134 // Use the swapBuffers callback only with the threaded proxy. 133 // Use the swapBuffers callback only with the threaded proxy.
135 if (client_->HasImplThread()) 134 if (client_->HasImplThread())
136 capabilities_.using_swap_complete_callback = 135 capabilities_.using_swap_complete_callback =
137 extensions.count("GL_CHROMIUM_swapbuffers_complete_callback"); 136 extensions.count("GL_CHROMIUM_swapbuffers_complete_callback");
138 if (capabilities_.using_swap_complete_callback)
139 context_->setSwapBuffersCompleteCallbackCHROMIUM(this);
140 137
141 capabilities_.using_set_visibility = 138 capabilities_.using_set_visibility =
142 extensions.count("GL_CHROMIUM_set_visibility"); 139 extensions.count("GL_CHROMIUM_set_visibility");
143 140
144 if (extensions.count("GL_CHROMIUM_iosurface")) 141 if (extensions.count("GL_CHROMIUM_iosurface"))
145 DCHECK(extensions.count("GL_ARB_texture_rectangle")); 142 DCHECK(extensions.count("GL_ARB_texture_rectangle"));
146 143
147 capabilities_.using_gpu_memory_manager = 144 capabilities_.using_gpu_memory_manager =
148 extensions.count("GL_CHROMIUM_gpu_memory_manager") && 145 extensions.count("GL_CHROMIUM_gpu_memory_manager") &&
149 Settings().useMemoryManagement; 146 Settings().useMemoryManagement;
(...skipping 24 matching lines...) Expand all
174 171
175 if (!InitializeSharedObjects()) 172 if (!InitializeSharedObjects())
176 return false; 173 return false;
177 174
178 // Make sure the viewport and context gets initialized, even if it is to zero. 175 // Make sure the viewport and context gets initialized, even if it is to zero.
179 ViewportChanged(); 176 ViewportChanged();
180 return true; 177 return true;
181 } 178 }
182 179
183 GLRenderer::~GLRenderer() { 180 GLRenderer::~GLRenderer() {
184 context_->setSwapBuffersCompleteCallbackCHROMIUM(NULL);
185 context_->setMemoryAllocationChangedCallbackCHROMIUM(NULL); 181 context_->setMemoryAllocationChangedCallbackCHROMIUM(NULL);
186 context_->setContextLostCallback(NULL);
187 CleanupSharedObjects(); 182 CleanupSharedObjects();
188 } 183 }
189 184
190 const RendererCapabilities& GLRenderer::Capabilities() const { 185 const RendererCapabilities& GLRenderer::Capabilities() const {
191 return capabilities_; 186 return capabilities_;
192 } 187 }
193 188
194 WebGraphicsContext3D* GLRenderer::Context() { return context_; } 189 WebGraphicsContext3D* GLRenderer::Context() { return context_; }
195 190
196 void GLRenderer::DebugGLCall(WebGraphicsContext3D* context, 191 void GLRenderer::DebugGLCall(WebGraphicsContext3D* context,
(...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 // assuming a double-buffered GPU pipeline. A texture can be 1597 // assuming a double-buffered GPU pipeline. A texture can be
1603 // written to after one full frame has past since it was last read. 1598 // written to after one full frame has past since it was last read.
1604 if (last_swap_fence_) 1599 if (last_swap_fence_)
1605 static_cast<SimpleSwapFence*>(last_swap_fence_.get())->SetHasPassed(); 1600 static_cast<SimpleSwapFence*>(last_swap_fence_.get())->SetHasPassed();
1606 last_swap_fence_ = resource_provider_->GetReadLockFence(); 1601 last_swap_fence_ = resource_provider_->GetReadLockFence();
1607 resource_provider_->SetReadLockFence(new SimpleSwapFence()); 1602 resource_provider_->SetReadLockFence(new SimpleSwapFence());
1608 1603
1609 return true; 1604 return true;
1610 } 1605 }
1611 1606
1612 void GLRenderer::ReceiveCompositorFrameAck(const CompositorFrameAck& ack) {
1613 onSwapBuffersComplete();
1614 }
1615
1616 void GLRenderer::onSwapBuffersComplete() { client_->OnSwapBuffersComplete(); }
1617
1618 void GLRenderer::onMemoryAllocationChanged( 1607 void GLRenderer::onMemoryAllocationChanged(
1619 WebGraphicsMemoryAllocation allocation) { 1608 WebGraphicsMemoryAllocation allocation) {
1620 // Just ignore the memory manager when it says to set the limit to zero 1609 // Just ignore the memory manager when it says to set the limit to zero
1621 // bytes. This will happen when the memory manager thinks that the renderer 1610 // bytes. This will happen when the memory manager thinks that the renderer
1622 // is not visible (which the renderer knows better). 1611 // is not visible (which the renderer knows better).
1623 if (allocation.bytesLimitWhenVisible) { 1612 if (allocation.bytesLimitWhenVisible) {
1624 ManagedMemoryPolicy policy( 1613 ManagedMemoryPolicy policy(
1625 allocation.bytesLimitWhenVisible, 1614 allocation.bytesLimitWhenVisible,
1626 PriorityCutoff(allocation.priorityCutoffWhenVisible), 1615 PriorityCutoff(allocation.priorityCutoffWhenVisible),
1627 allocation.bytesLimitWhenNotVisible, 1616 allocation.bytesLimitWhenNotVisible,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1685 } 1674 }
1686 1675
1687 void GLRenderer::EnsureBackbuffer() { 1676 void GLRenderer::EnsureBackbuffer() {
1688 if (!is_backbuffer_discarded_) 1677 if (!is_backbuffer_discarded_)
1689 return; 1678 return;
1690 1679
1691 output_surface_->EnsureBackbuffer(); 1680 output_surface_->EnsureBackbuffer();
1692 is_backbuffer_discarded_ = false; 1681 is_backbuffer_discarded_ = false;
1693 } 1682 }
1694 1683
1695 void GLRenderer::onContextLost() { client_->DidLoseOutputSurface(); }
1696
1697 void GLRenderer::GetFramebufferPixels(void* pixels, gfx::Rect rect) { 1684 void GLRenderer::GetFramebufferPixels(void* pixels, gfx::Rect rect) {
1698 DCHECK(rect.right() <= ViewportWidth()); 1685 DCHECK(rect.right() <= ViewportWidth());
1699 DCHECK(rect.bottom() <= ViewportHeight()); 1686 DCHECK(rect.bottom() <= ViewportHeight());
1700 1687
1701 if (!pixels) 1688 if (!pixels)
1702 return; 1689 return;
1703 1690
1704 MakeContextCurrent(); 1691 MakeContextCurrent();
1705 1692
1706 bool do_workaround = NeedsIOSurfaceReadbackWorkaround(); 1693 bool do_workaround = NeedsIOSurfaceReadbackWorkaround();
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
2129 GLC(context_, context_->deleteFramebuffer(offscreen_framebuffer_id_)); 2116 GLC(context_, context_->deleteFramebuffer(offscreen_framebuffer_id_));
2130 2117
2131 ReleaseRenderPassTextures(); 2118 ReleaseRenderPassTextures();
2132 } 2119 }
2133 2120
2134 bool GLRenderer::IsContextLost() { 2121 bool GLRenderer::IsContextLost() {
2135 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR); 2122 return (context_->getGraphicsResetStatusARB() != GL_NO_ERROR);
2136 } 2123 }
2137 2124
2138 } // namespace cc 2125 } // namespace cc
OLDNEW
« no previous file with comments | « cc/gl_renderer.h ('k') | cc/gl_renderer_pixeltest.cc » ('j') | cc/layer_tree_host_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698