1 // Copyright 2018 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "third_party/blink/renderer/platform/graphics/canvas_resource_host.h" 6 7 #include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h" 8 9 namespace blink { 10 ResourceProvider() const11CanvasResourceProvider* CanvasResourceHost::ResourceProvider() const { 12 return resource_provider_.get(); 13 } 14 15 std::unique_ptr<CanvasResourceProvider> ReplaceResourceProvider(std::unique_ptr<CanvasResourceProvider> new_resource_provider)16CanvasResourceHost::ReplaceResourceProvider( 17 std::unique_ptr<CanvasResourceProvider> new_resource_provider) { 18 std::unique_ptr<CanvasResourceProvider> old_resource_provider = 19 std::move(resource_provider_); 20 resource_provider_ = std::move(new_resource_provider); 21 UpdateMemoryUsage(); 22 if (resource_provider_) { 23 resource_provider_->Canvas()->restoreToCount(1); 24 InitializeForRecording(resource_provider_->Canvas()); 25 // Using unretained here since CanvasResourceHost owns |resource_provider_| 26 // and is guaranteed to outlive it 27 resource_provider_->SetRestoreClipStackCallback(base::BindRepeating( 28 &CanvasResourceHost::InitializeForRecording, base::Unretained(this))); 29 } 30 if (old_resource_provider) { 31 old_resource_provider->SetRestoreClipStackCallback( 32 CanvasResourceProvider::RestoreMatrixClipStackCb()); 33 } 34 return old_resource_provider; 35 } 36 DiscardResourceProvider()37void CanvasResourceHost::DiscardResourceProvider() { 38 resource_provider_ = nullptr; 39 UpdateMemoryUsage(); 40 } 41 InitializeForRecording(cc::PaintCanvas * canvas)42void CanvasResourceHost::InitializeForRecording(cc::PaintCanvas* canvas) { 43 canvas->save(); 44 RestoreCanvasMatrixClipStack(canvas); 45 } 46 47 } // namespace blink 48