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

Side by Side Diff: cc/CCLayerTreeHostImpl.cpp

Issue 10989028: cc: Remove WebCore dependecies from CCRenderPass and CCDrawQuad classes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 "config.h" 5 #include "config.h"
6 6
7 #include "CCLayerTreeHostImpl.h" 7 #include "CCLayerTreeHostImpl.h"
8 8
9 #include "CCAppendQuadsData.h" 9 #include "CCAppendQuadsData.h"
10 #include "CCDamageTracker.h" 10 #include "CCDamageTracker.h"
(...skipping 12 matching lines...) Expand all
23 #include "CCRenderPassDrawQuad.h" 23 #include "CCRenderPassDrawQuad.h"
24 #include "CCRendererGL.h" 24 #include "CCRendererGL.h"
25 #include "CCRendererSoftware.h" 25 #include "CCRendererSoftware.h"
26 #include "CCRenderingStats.h" 26 #include "CCRenderingStats.h"
27 #include "CCScrollbarAnimationController.h" 27 #include "CCScrollbarAnimationController.h"
28 #include "CCScrollbarLayerImpl.h" 28 #include "CCScrollbarLayerImpl.h"
29 #include "CCSettings.h" 29 #include "CCSettings.h"
30 #include "CCSingleThreadProxy.h" 30 #include "CCSingleThreadProxy.h"
31 #include "TraceEvent.h" 31 #include "TraceEvent.h"
32 #include <wtf/CurrentTime.h> 32 #include <wtf/CurrentTime.h>
33 #include <algorithm>
33 34
34 using WebKit::WebTransformationMatrix; 35 using WebKit::WebTransformationMatrix;
35 36
36 namespace { 37 namespace {
37 38
38 void didVisibilityChange(cc::CCLayerTreeHostImpl* id, bool visible) 39 void didVisibilityChange(cc::CCLayerTreeHostImpl* id, bool visible)
39 { 40 {
40 if (visible) { 41 if (visible) {
41 TRACE_EVENT_ASYNC_BEGIN1("webkit", "CCLayerTreeHostImpl::setVisible", id , "CCLayerTreeHostImpl", id); 42 TRACE_EVENT_ASYNC_BEGIN1("webkit", "CCLayerTreeHostImpl::setVisible", id , "CCLayerTreeHostImpl", id);
42 return; 43 return;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
245 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities(). maxTextureSize, renderSurfaceLayerList); 246 CCLayerTreeHostCommon::calculateDrawTransforms(m_rootLayerImpl.get(), de viceViewportSize(), m_deviceScaleFactor, &m_layerSorter, rendererCapabilities(). maxTextureSize, renderSurfaceLayerList);
246 CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList); 247 CCLayerTreeHostCommon::calculateVisibleRects(renderSurfaceLayerList);
247 248
248 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ; 249 trackDamageForAllSurfaces(m_rootLayerImpl.get(), renderSurfaceLayerList) ;
249 } 250 }
250 } 251 }
251 252
252 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r enderPass) 253 void CCLayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<CCRenderPass> r enderPass)
253 { 254 {
254 CCRenderPass* pass = renderPass.get(); 255 CCRenderPass* pass = renderPass.get();
255 renderPasses.append(pass); 256 renderPasses.push_back(pass);
256 renderPassesById.set(pass->id(), renderPass.Pass()); 257 renderPassesById.set(pass->id(), renderPass.Pass());
257 } 258 }
258 259
259 bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame) 260 bool CCLayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
260 { 261 {
261 ASSERT(frame.renderPasses.isEmpty()); 262 ASSERT(frame.renderPasses.isEmpty());
262 263
263 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList); 264 calculateRenderSurfaceLayerList(*frame.renderSurfaceLayerList);
264 265
265 TRACE_EVENT1("cc", "CCLayerTreeHostImpl::calculateRenderPasses", "renderSurf aceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerLi st->size())); 266 TRACE_EVENT1("cc", "CCLayerTreeHostImpl::calculateRenderPasses", "renderSurf aceLayerList.size()", static_cast<long long unsigned>(frame.renderSurfaceLayerLi st->size()));
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 337
337 #if !ASSERT_DISABLED 338 #if !ASSERT_DISABLED
338 for (size_t i = 0; i < frame.renderPasses.size(); ++i) { 339 for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
339 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j) 340 for (size_t j = 0; j < frame.renderPasses[i]->quadList().size(); ++j)
340 ASSERT(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >= 0); 341 ASSERT(frame.renderPasses[i]->quadList()[j]->sharedQuadStateId() >= 0);
341 ASSERT(frame.renderPassesById.contains(frame.renderPasses[i]->id())); 342 ASSERT(frame.renderPassesById.contains(frame.renderPasses[i]->id()));
342 } 343 }
343 #endif 344 #endif
344 345
345 if (!m_hasTransparentBackground) { 346 if (!m_hasTransparentBackground) {
346 frame.renderPasses.last()->setHasTransparentBackground(false); 347 frame.renderPasses.back()->setHasTransparentBackground(false);
347 frame.renderPasses.last()->appendQuadsToFillScreen(m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker); 348 frame.renderPasses.back()->appendQuadsToFillScreen(m_rootLayerImpl.get() , m_backgroundColor, occlusionTracker);
348 } 349 }
349 350
350 if (drawFrame) 351 if (drawFrame)
351 occlusionTracker.overdrawMetrics().recordMetrics(this); 352 occlusionTracker.overdrawMetrics().recordMetrics(this);
352 353
353 removeRenderPasses(CullRenderPassesWithNoQuads(), frame); 354 removeRenderPasses(CullRenderPassesWithNoQuads(), frame);
354 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses); 355 m_renderer->decideRenderPassAllocationsForFrame(frame.renderPasses);
355 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame); 356 removeRenderPasses(CullRenderPassesWithCachedTextures(*m_renderer), frame);
356 357
357 return drawFrame; 358 return drawFrame;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 static inline CCRenderPass* findRenderPassById(CCRenderPass::Id renderPassId, co nst CCLayerTreeHostImpl::FrameData& frame) 407 static inline CCRenderPass* findRenderPassById(CCRenderPass::Id renderPassId, co nst CCLayerTreeHostImpl::FrameData& frame)
407 { 408 {
408 CCRenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(rende rPassId); 409 CCRenderPassIdHashMap::const_iterator it = frame.renderPassesById.find(rende rPassId);
409 ASSERT(it != frame.renderPassesById.end()); 410 ASSERT(it != frame.renderPassesById.end());
410 return it->second; 411 return it->second;
411 } 412 }
412 413
413 static void removeRenderPassesRecursive(CCRenderPass::Id removeRenderPassId, CCL ayerTreeHostImpl::FrameData& frame) 414 static void removeRenderPassesRecursive(CCRenderPass::Id removeRenderPassId, CCL ayerTreeHostImpl::FrameData& frame)
414 { 415 {
415 CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, fram e); 416 CCRenderPass* removeRenderPass = findRenderPassById(removeRenderPassId, fram e);
416 size_t removeIndex = frame.renderPasses.find(removeRenderPass); 417 CCRenderPassList& renderPasses = frame.renderPasses;
418 CCRenderPassList::iterator toRemove = std::find(renderPasses.begin(), render Passes.end(), removeRenderPass);
417 419
418 // The pass was already removed by another quad - probably the original, and we are the replica. 420 // The pass was already removed by another quad - probably the original, and we are the replica.
419 if (removeIndex == notFound) 421 if (toRemove == renderPasses.end())
420 return; 422 return;
421 423
424 size_t removeIndex = std::distance(renderPasses.begin(), toRemove);
422 const CCRenderPass* removedPass = frame.renderPasses[removeIndex]; 425 const CCRenderPass* removedPass = frame.renderPasses[removeIndex];
423 frame.renderPasses.remove(removeIndex); 426 frame.renderPasses.erase(toRemove);
424 427
425 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively. 428 // Now follow up for all RenderPass quads and remove their RenderPasses recu rsively.
426 const CCQuadList& quadList = removedPass->quadList(); 429 const CCQuadList& quadList = removedPass->quadList();
427 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin(); 430 CCQuadList::constBackToFrontIterator quadListIterator = quadList.backToFront Begin();
428 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 431 for (; quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
429 CCDrawQuad* currentQuad = (*quadListIterator); 432 CCDrawQuad* currentQuad = (*quadListIterator);
430 if (currentQuad->material() != CCDrawQuad::RenderPass) 433 if (currentQuad->material() != CCDrawQuad::RenderPass)
431 continue; 434 continue;
432 435
433 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId(); 436 CCRenderPass::Id nextRemoveRenderPassId = CCRenderPassDrawQuad::material Cast(currentQuad)->renderPassId();
434 removeRenderPassesRecursive(nextRemoveRenderPassId, frame); 437 removeRenderPassesRecursive(nextRemoveRenderPassId, frame);
435 } 438 }
436 } 439 }
437 440
438 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const 441 bool CCLayerTreeHostImpl::CullRenderPassesWithCachedTextures::shouldRemoveRender Pass(const CCRenderPassDrawQuad& quad, const FrameData&) const
439 { 442 {
440 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId()); 443 return quad.contentsChangedSinceLastFrame().isEmpty() && m_renderer.haveCach edResourcesForRenderPassId(quad.renderPassId());
441 } 444 }
442 445
443 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const 446 bool CCLayerTreeHostImpl::CullRenderPassesWithNoQuads::shouldRemoveRenderPass(co nst CCRenderPassDrawQuad& quad, const FrameData& frame) const
444 { 447 {
445 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me); 448 const CCRenderPass* renderPass = findRenderPassById(quad.renderPassId(), fra me);
446 size_t passIndex = frame.renderPasses.find(renderPass); 449 const CCRenderPassList& renderPasses = frame.renderPasses;
450 CCRenderPassList::const_iterator foundPass = std::find(renderPasses.begin(), renderPasses.end(), renderPass);
447 451
448 bool renderPassAlreadyRemoved = passIndex == notFound; 452 size_t passIndex = std::distance(renderPasses.begin(), foundPass);
453 bool renderPassAlreadyRemoved = foundPass == renderPasses.end();
449 if (renderPassAlreadyRemoved) 454 if (renderPassAlreadyRemoved)
450 return false; 455 return false;
451 456
452 // If any quad or RenderPass draws into this RenderPass, then keep it. 457 // If any quad or RenderPass draws into this RenderPass, then keep it.
453 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList(); 458 const CCQuadList& quadList = frame.renderPasses[passIndex]->quadList();
454 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) { 459 for (CCQuadList::constBackToFrontIterator quadListIterator = quadList.backTo FrontBegin(); quadListIterator != quadList.backToFrontEnd(); ++quadListIterator) {
455 CCDrawQuad* currentQuad = *quadListIterator; 460 CCDrawQuad* currentQuad = *quadListIterator;
456 461
457 if (currentQuad->material() != CCDrawQuad::RenderPass) 462 if (currentQuad->material() != CCDrawQuad::RenderPass)
458 return false; 463 return false;
459 464
460 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame); 465 const CCRenderPass* contributingPass = findRenderPassById(CCRenderPassDr awQuad::materialCast(currentQuad)->renderPassId(), frame);
461 if (frame.renderPasses.contains(contributingPass)) 466 CCRenderPassList::const_iterator foundContributingPass = std::find(rende rPasses.begin(), renderPasses.end(), contributingPass);
467 if (foundContributingPass != renderPasses.end())
462 return false; 468 return false;
463 } 469 }
464 return true; 470 return true;
465 } 471 }
466 472
467 // Defined for linking tests. 473 // Defined for linking tests.
468 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&); 474 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithCachedTextures>(CullRenderPassesWithCachedTextures, FrameData&);
469 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&); 475 template void CCLayerTreeHostImpl::removeRenderPasses<CCLayerTreeHostImpl::CullR enderPassesWithNoQuads>(CullRenderPassesWithNoQuads, FrameData&);
470 476
471 // static 477 // static
(...skipping 830 matching lines...) Expand 10 before | Expand all | Expand 10 after
1302 1308
1303 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController(); 1309 CCScrollbarAnimationController* scrollbarController = layer->scrollbarAnimat ionController();
1304 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1310 if (scrollbarController && scrollbarController->animate(monotonicTime))
1305 m_client->setNeedsRedrawOnImplThread(); 1311 m_client->setNeedsRedrawOnImplThread();
1306 1312
1307 for (size_t i = 0; i < layer->children().size(); ++i) 1313 for (size_t i = 0; i < layer->children().size(); ++i)
1308 animateScrollbarsRecursive(layer->children()[i], monotonicTime); 1314 animateScrollbarsRecursive(layer->children()[i], monotonicTime);
1309 } 1315 }
1310 1316
1311 } // namespace cc 1317 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698