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() const11 CanvasResourceProvider* CanvasResourceHost::ResourceProvider() const {
12   return resource_provider_.get();
13 }
14 
15 std::unique_ptr<CanvasResourceProvider>
ReplaceResourceProvider(std::unique_ptr<CanvasResourceProvider> new_resource_provider)16 CanvasResourceHost::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()37 void CanvasResourceHost::DiscardResourceProvider() {
38   resource_provider_ = nullptr;
39   UpdateMemoryUsage();
40 }
41 
InitializeForRecording(cc::PaintCanvas * canvas)42 void CanvasResourceHost::InitializeForRecording(cc::PaintCanvas* canvas) {
43   canvas->save();
44   RestoreCanvasMatrixClipStack(canvas);
45 }
46 
47 }  // namespace blink
48