// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "flutter/shell/gpu/gpu_surface_vulkan.h"
#include "flutter/fml/logging.h"

namespace shell {

GPUSurfaceVulkan::GPUSurfaceVulkan(
    fml::RefPtr<vulkan::VulkanProcTable> proc_table,
    std::unique_ptr<vulkan::VulkanNativeSurface> native_surface)
    : window_(std::move(proc_table), std::move(native_surface)),
      weak_factory_(this) {}

GPUSurfaceVulkan::~GPUSurfaceVulkan() = default;

// |shell::Surface|
bool GPUSurfaceVulkan::IsValid() {
  return window_.IsValid();
}

// |shell::Surface|
std::unique_ptr<SurfaceFrame> GPUSurfaceVulkan::AcquireFrame(
    const SkISize& size) {
  auto surface = window_.AcquireSurface();

  if (surface == nullptr) {
    return nullptr;
  }

  SurfaceFrame::SubmitCallback callback =
      [weak_this = weak_factory_.GetWeakPtr()](const SurfaceFrame&,
                                               SkCanvas* canvas) -> bool {
    // Frames are only ever acquired on the GPU thread. This is also the thread
    // on which the weak pointer factory is collected (as this instance is owned
    // by the rasterizer). So this use of weak pointers is safe.
    if (canvas == nullptr || !weak_this) {
      return false;
    }
    return weak_this->window_.SwapBuffers();
  };
  return std::make_unique<SurfaceFrame>(std::move(surface),
                                        std::move(callback));
}

// |shell::Surface|
SkMatrix GPUSurfaceVulkan::GetRootTransformation() const {
  // This backend does not support delegating to the underlying platform to
  // query for root surface transformations. Just return identity.
  SkMatrix matrix;
  matrix.reset();
  return matrix;
}

// |shell::Surface|
GrContext* GPUSurfaceVulkan::GetContext() {
  return window_.GetSkiaGrContext();
}

}  // namespace shell
