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

Side by Side Diff: third_party/WebKit/Source/platform/graphics/paint/PaintController.cpp

Issue 2768143002: Back PaintRecord with PaintOpBuffer instead of SkPicture (Closed)
Patch Set: Fix win build Created 3 years, 8 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 #include "platform/graphics/paint/PaintController.h" 5 #include "platform/graphics/paint/PaintController.h"
6 6
7 #include "platform/graphics/GraphicsLayer.h" 7 #include "platform/graphics/GraphicsLayer.h"
8 #include "platform/graphics/paint/DrawingDisplayItem.h" 8 #include "platform/graphics/paint/DrawingDisplayItem.h"
9 #include "platform/instrumentation/tracing/TraceEvent.h" 9 #include "platform/instrumentation/tracing/TraceEvent.h"
10 #include "third_party/skia/include/core/SkPictureAnalyzer.h" 10 #include "third_party/skia/include/core/SkPictureAnalyzer.h"
11 #include "wtf/AutoReset.h" 11 #include "wtf/AutoReset.h"
12 #include "wtf/text/StringBuilder.h" 12 #include "wtf/text/StringBuilder.h"
13 13
14 #ifndef NDEBUG 14 #ifndef NDEBUG
15 #include "platform/graphics/LoggingCanvas.h" 15 #include "platform/graphics/LoggingCanvas.h"
16 #include <stdio.h> 16 #include <stdio.h>
17 #endif 17 #endif
18 18
19 static constexpr int maxNumberOfSlowPathsBeforeVeto = 5;
20
19 namespace blink { 21 namespace blink {
20 22
21 void PaintController::setTracksRasterInvalidations(bool value) { 23 void PaintController::setTracksRasterInvalidations(bool value) {
22 if (value) { 24 if (value) {
23 m_paintChunksRasterInvalidationTrackingMap = 25 m_paintChunksRasterInvalidationTrackingMap =
24 WTF::wrapUnique(new RasterInvalidationTrackingMap<const PaintChunk>); 26 WTF::wrapUnique(new RasterInvalidationTrackingMap<const PaintChunk>);
25 } else { 27 } else {
26 m_paintChunksRasterInvalidationTrackingMap = nullptr; 28 m_paintChunksRasterInvalidationTrackingMap = nullptr;
27 } 29 }
28 } 30 }
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 // These data structures are used during painting only. 498 // These data structures are used during painting only.
497 DCHECK(!isSkippingCache()); 499 DCHECK(!isSkippingCache());
498 #if DCHECK_IS_ON() 500 #if DCHECK_IS_ON()
499 m_newDisplayItemIndicesByClient.clear(); 501 m_newDisplayItemIndicesByClient.clear();
500 #endif 502 #endif
501 503
502 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() && 504 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled() &&
503 !m_newDisplayItemList.isEmpty()) 505 !m_newDisplayItemList.isEmpty())
504 generateChunkRasterInvalidationRects(m_newPaintChunks.lastChunk()); 506 generateChunkRasterInvalidationRects(m_newPaintChunks.lastChunk());
505 507
506 SkPictureGpuAnalyzer gpuAnalyzer; 508 int numSlowPaths = 0;
507 509
508 m_currentCacheGeneration = 510 m_currentCacheGeneration =
509 DisplayItemClient::CacheGenerationOrInvalidationReason::next(); 511 DisplayItemClient::CacheGenerationOrInvalidationReason::next();
510 Vector<const DisplayItemClient*> skippedCacheClients; 512 Vector<const DisplayItemClient*> skippedCacheClients;
511 for (const auto& item : m_newDisplayItemList) { 513 for (const auto& item : m_newDisplayItemList) {
512 // No reason to continue the analysis once we have a veto. 514 // No reason to continue the analysis once we have a veto.
513 if (gpuAnalyzer.suitableForGpuRasterization()) 515 if (numSlowPaths <= maxNumberOfSlowPathsBeforeVeto)
514 item.analyzeForGpuRasterization(gpuAnalyzer); 516 numSlowPaths += item.numberOfSlowPaths();
515 517
516 // TODO(wkorman): Only compute and append visual rect for drawings. 518 // TODO(wkorman): Only compute and append visual rect for drawings.
517 m_newDisplayItemList.appendVisualRect( 519 m_newDisplayItemList.appendVisualRect(
518 visualRectForDisplayItem(item, offsetFromLayoutObject)); 520 visualRectForDisplayItem(item, offsetFromLayoutObject));
519 521
520 if (item.isCacheable()) { 522 if (item.isCacheable()) {
521 item.client().setDisplayItemsCached(m_currentCacheGeneration); 523 item.client().setDisplayItemsCached(m_currentCacheGeneration);
522 } else { 524 } else {
523 if (item.client().isJustCreated()) 525 if (item.client().isJustCreated())
524 item.client().clearIsJustCreated(); 526 item.client().clearIsJustCreated();
(...skipping 17 matching lines...) Expand all
542 } 544 }
543 } 545 }
544 546
545 for (auto* client : skippedCacheClients) 547 for (auto* client : skippedCacheClients)
546 client->setDisplayItemsUncached(); 548 client->setDisplayItemsUncached();
547 549
548 // The new list will not be appended to again so we can release unused memory. 550 // The new list will not be appended to again so we can release unused memory.
549 m_newDisplayItemList.shrinkToFit(); 551 m_newDisplayItemList.shrinkToFit();
550 m_currentPaintArtifact = PaintArtifact( 552 m_currentPaintArtifact = PaintArtifact(
551 std::move(m_newDisplayItemList), m_newPaintChunks.releasePaintChunks(), 553 std::move(m_newDisplayItemList), m_newPaintChunks.releasePaintChunks(),
552 gpuAnalyzer.suitableForGpuRasterization()); 554 numSlowPaths <= maxNumberOfSlowPathsBeforeVeto);
553 resetCurrentListIndices(); 555 resetCurrentListIndices();
554 m_outOfOrderItemIndices.clear(); 556 m_outOfOrderItemIndices.clear();
555 m_outOfOrderChunkIndices.clear(); 557 m_outOfOrderChunkIndices.clear();
556 m_itemsMovedIntoNewList.clear(); 558 m_itemsMovedIntoNewList.clear();
557 559
558 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) { 560 if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) {
559 for (const auto& chunk : m_currentPaintArtifact.paintChunks()) { 561 for (const auto& chunk : m_currentPaintArtifact.paintChunks()) {
560 if (chunk.id && chunk.id->client.isJustCreated()) 562 if (chunk.id && chunk.id->client.isJustCreated())
561 chunk.id->client.clearIsJustCreated(); 563 chunk.id->client.clearIsJustCreated();
562 } 564 }
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 showPaintRecords 865 showPaintRecords
864 ? (DisplayItemList::JsonOptions::ShowPaintRecords | 866 ? (DisplayItemList::JsonOptions::ShowPaintRecords |
865 DisplayItemList::JsonOptions::ShowClientDebugName) 867 DisplayItemList::JsonOptions::ShowClientDebugName)
866 : DisplayItemList::JsonOptions::ShowClientDebugName) 868 : DisplayItemList::JsonOptions::ShowClientDebugName)
867 ->toPrettyJSONString() 869 ->toPrettyJSONString()
868 .utf8() 870 .utf8()
869 .data()); 871 .data());
870 } 872 }
871 873
872 } // namespace blink 874 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698