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

Side by Side Diff: cc/single_thread_proxy.cc

Issue 12212007: cc: Route offscreen context creation for compositor to the browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove the GrContextProvider::ScopedContexts guard classes Created 7 years, 10 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 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 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/single_thread_proxy.h" 5 #include "cc/single_thread_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "cc/draw_quad.h" 9 #include "cc/draw_quad.h"
10 #include "cc/layer_tree_host.h" 10 #include "cc/layer_tree_host.h"
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 132
133 bool SingleThreadProxy::recreateOutputSurface() 133 bool SingleThreadProxy::recreateOutputSurface()
134 { 134 {
135 TRACE_EVENT0("cc", "SingleThreadProxy::recreateContext"); 135 TRACE_EVENT0("cc", "SingleThreadProxy::recreateContext");
136 DCHECK(Proxy::isMainThread()); 136 DCHECK(Proxy::isMainThread());
137 DCHECK(m_outputSurfaceLost); 137 DCHECK(m_outputSurfaceLost);
138 138
139 scoped_ptr<OutputSurface> outputSurface = m_layerTreeHost->createOutputSurfa ce(); 139 scoped_ptr<OutputSurface> outputSurface = m_layerTreeHost->createOutputSurfa ce();
140 if (!outputSurface.get()) 140 if (!outputSurface.get())
141 return false; 141 return false;
142 WebKit::WebGraphicsContext3D* offscreenContext3d = NULL;
143 GrContext* offscreenGrContext = NULL;
144 if (m_RendererCapabilitiesForMainThread.usingOffscreenContext3d && m_layerTr eeHost->needsOffscreenContext()) {
145 offscreenContext3d = m_layerTreeHost->client()->OffscreenContext3dForMai nThread();
146 if (!offscreenContext3d)
147 return false;
148 offscreenGrContext = m_layerTreeHost->client()->OffscreenGrContextForMai nThread();
149 }
142 150
143 bool initialized; 151 bool initialized;
144 { 152 {
145 DebugScopedSetMainThreadBlocked mainThreadBlocked(this); 153 DebugScopedSetMainThreadBlocked mainThreadBlocked(this);
146 DebugScopedSetImplThread impl(this); 154 DebugScopedSetImplThread impl(this);
147 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl- >resourceProvider()); 155 m_layerTreeHost->deleteContentsTexturesOnImplThread(m_layerTreeHostImpl- >resourceProvider());
148 initialized = m_layerTreeHostImpl->initializeRenderer(outputSurface.Pass ()); 156 initialized = m_layerTreeHostImpl->initializeRenderer(outputSurface.Pass ());
149 if (initialized) { 157 if (initialized) {
150 m_RendererCapabilitiesForMainThread = m_layerTreeHostImpl->rendererC apabilities(); 158 m_RendererCapabilitiesForMainThread = m_layerTreeHostImpl->rendererC apabilities();
159 m_layerTreeHostImpl->resourceProvider()->setOffscreenContexts(offscr eenContext3d, offscreenGrContext);
151 } 160 }
152 } 161 }
153 162
154 if (initialized) 163 if (initialized)
155 m_outputSurfaceLost = false; 164 m_outputSurfaceLost = false;
156 165
157 return initialized; 166 return initialized;
158 } 167 }
159 168
160 void SingleThreadProxy::renderingStats(RenderingStats* stats) 169 void SingleThreadProxy::renderingStats(RenderingStats* stats)
(...skipping 28 matching lines...) Expand all
189 m_layerTreeHostImpl->beginCommit(); 198 m_layerTreeHostImpl->beginCommit();
190 199
191 m_layerTreeHost->contentsTextureManager()->pushTexturePrioritiesToBackin gs(); 200 m_layerTreeHost->contentsTextureManager()->pushTexturePrioritiesToBackin gs();
192 m_layerTreeHost->beginCommitOnImplThread(m_layerTreeHostImpl.get()); 201 m_layerTreeHost->beginCommitOnImplThread(m_layerTreeHostImpl.get());
193 202
194 scoped_ptr<ResourceUpdateController> updateController = 203 scoped_ptr<ResourceUpdateController> updateController =
195 ResourceUpdateController::create( 204 ResourceUpdateController::create(
196 NULL, 205 NULL,
197 Proxy::mainThread(), 206 Proxy::mainThread(),
198 queue.Pass(), 207 queue.Pass(),
199 m_layerTreeHostImpl->resourceProvider(), 208 m_layerTreeHostImpl->resourceProvider());
200 hasImplThread());
201 updateController->finalize(); 209 updateController->finalize();
202 210
203 m_layerTreeHost->finishCommitOnImplThread(m_layerTreeHostImpl.get()); 211 m_layerTreeHost->finishCommitOnImplThread(m_layerTreeHostImpl.get());
204 212
205 m_layerTreeHostImpl->commitComplete(); 213 m_layerTreeHostImpl->commitComplete();
206 214
207 #ifndef NDEBUG 215 #ifndef NDEBUG
208 // In the single-threaded case, the scroll deltas should never be 216 // In the single-threaded case, the scroll deltas should never be
209 // touched on the impl layer tree. 217 // touched on the impl layer tree.
210 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_layerTreeHostImpl->processS crollDeltas(); 218 scoped_ptr<ScrollAndScaleSet> scrollInfo = m_layerTreeHostImpl->processS crollDeltas();
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 NOTREACHED(); 383 NOTREACHED();
376 } 384 }
377 385
378 bool SingleThreadProxy::commitAndComposite() 386 bool SingleThreadProxy::commitAndComposite()
379 { 387 {
380 DCHECK(Proxy::isMainThread()); 388 DCHECK(Proxy::isMainThread());
381 389
382 if (!m_layerTreeHost->initializeRendererIfNeeded()) 390 if (!m_layerTreeHost->initializeRendererIfNeeded())
383 return false; 391 return false;
384 392
393 WebKit::WebGraphicsContext3D* offscreenContext3d = NULL;
394 GrContext* offscreenGrContext = NULL;
395 if (m_RendererCapabilitiesForMainThread.usingOffscreenContext3d && m_layerTr eeHost->needsOffscreenContext()) {
396 offscreenContext3d = m_layerTreeHost->client()->OffscreenContext3dForMai nThread();
397 offscreenGrContext = m_layerTreeHost->client()->OffscreenGrContextForMai nThread();
398 }
399
385 m_layerTreeHost->contentsTextureManager()->unlinkAndClearEvictedBackings(); 400 m_layerTreeHost->contentsTextureManager()->unlinkAndClearEvictedBackings();
386 401
387 scoped_ptr<ResourceUpdateQueue> queue = make_scoped_ptr(new ResourceUpdateQu eue); 402 scoped_ptr<ResourceUpdateQueue> queue = make_scoped_ptr(new ResourceUpdateQu eue);
388 m_layerTreeHost->updateLayers(*(queue.get()), m_layerTreeHostImpl->memoryAll ocationLimitBytes()); 403 m_layerTreeHost->updateLayers(*(queue.get()), m_layerTreeHostImpl->memoryAll ocationLimitBytes());
389 404
390 m_layerTreeHost->willCommit(); 405 m_layerTreeHost->willCommit();
391 doCommit(queue.Pass()); 406 doCommit(queue.Pass());
392 bool result = doComposite(); 407 bool result = doComposite(offscreenContext3d, offscreenGrContext);
393 m_layerTreeHost->didBeginFrame(); 408 m_layerTreeHost->didBeginFrame();
394 return result; 409 return result;
395 } 410 }
396 411
397 bool SingleThreadProxy::doComposite() 412 bool SingleThreadProxy::doComposite(WebKit::WebGraphicsContext3D* offscreenC ontext3d, GrContext* offscreenGrContext)
398 { 413 {
399 DCHECK(!m_outputSurfaceLost); 414 DCHECK(!m_outputSurfaceLost);
400 { 415 {
401 DebugScopedSetImplThread impl(this); 416 DebugScopedSetImplThread impl(this);
402 base::AutoReset<bool> markInside(&m_insideDraw, true); 417 base::AutoReset<bool> markInside(&m_insideDraw, true);
403 418
419 m_layerTreeHostImpl->resourceProvider()->setOffscreenContexts(offscreenC ontext3d, offscreenGrContext);
420
404 if (!m_layerTreeHostImpl->visible()) 421 if (!m_layerTreeHostImpl->visible())
405 return false; 422 return false;
406 423
407 m_layerTreeHostImpl->animate(base::TimeTicks::Now(), base::Time::Now()); 424 m_layerTreeHostImpl->animate(base::TimeTicks::Now(), base::Time::Now());
408 425
409 // We guard prepareToDraw() with canDraw() because it always returns a v alid frame, so can only 426 // We guard prepareToDraw() with canDraw() because it always returns a v alid frame, so can only
410 // be used when such a frame is possible. Since drawLayers() depends on the result of 427 // be used when such a frame is possible. Since drawLayers() depends on the result of
411 // prepareToDraw(), it is guarded on canDraw() as well. 428 // prepareToDraw(), it is guarded on canDraw() as well.
412 if (!m_layerTreeHostImpl->canDraw()) 429 if (!m_layerTreeHostImpl->canDraw())
413 return false; 430 return false;
(...skipping 29 matching lines...) Expand all
443 } 460 }
444 461
445 skia::RefPtr<SkPicture> SingleThreadProxy::capturePicture() 462 skia::RefPtr<SkPicture> SingleThreadProxy::capturePicture()
446 { 463 {
447 // Requires impl-side painting, which is only supported in threaded composit ing. 464 // Requires impl-side painting, which is only supported in threaded composit ing.
448 NOTREACHED(); 465 NOTREACHED();
449 return skia::RefPtr<SkPicture>(); 466 return skia::RefPtr<SkPicture>();
450 } 467 }
451 468
452 } // namespace cc 469 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698