| // Copyright 2013 The Flutter 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 "impeller/renderer/backend/vulkan/tracked_objects_vk.h" |
| |
| #include "impeller/renderer/backend/vulkan/gpu_tracer_vk.h" |
| |
| namespace impeller { |
| |
| TrackedObjectsVK::TrackedObjectsVK( |
| const std::weak_ptr<const ContextVK>& context, |
| const std::shared_ptr<CommandPoolVK>& pool, |
| std::unique_ptr<GPUProbe> probe) |
| : desc_pool_(context), probe_(std::move(probe)) { |
| if (!pool) { |
| return; |
| } |
| auto buffer = pool->CreateCommandBuffer(); |
| if (!buffer) { |
| return; |
| } |
| pool_ = pool; |
| buffer_ = std::move(buffer); |
| is_valid_ = true; |
| } |
| |
| TrackedObjectsVK::~TrackedObjectsVK() { |
| if (!buffer_) { |
| return; |
| } |
| pool_->CollectCommandBuffer(std::move(buffer_)); |
| } |
| |
| bool TrackedObjectsVK::IsValid() const { |
| return is_valid_; |
| } |
| |
| void TrackedObjectsVK::Track(std::shared_ptr<SharedObjectVK> object) { |
| if (!object) { |
| return; |
| } |
| tracked_objects_.insert(std::move(object)); |
| } |
| |
| void TrackedObjectsVK::Track(std::shared_ptr<const DeviceBuffer> buffer) { |
| if (!buffer) { |
| return; |
| } |
| tracked_buffers_.insert(std::move(buffer)); |
| } |
| |
| bool TrackedObjectsVK::IsTracking( |
| const std::shared_ptr<const DeviceBuffer>& buffer) const { |
| if (!buffer) { |
| return false; |
| } |
| return tracked_buffers_.find(buffer) != tracked_buffers_.end(); |
| } |
| |
| void TrackedObjectsVK::Track(std::shared_ptr<const TextureSourceVK> texture) { |
| if (!texture) { |
| return; |
| } |
| tracked_textures_.insert(std::move(texture)); |
| } |
| |
| bool TrackedObjectsVK::IsTracking( |
| const std::shared_ptr<const TextureSourceVK>& texture) const { |
| if (!texture) { |
| return false; |
| } |
| return tracked_textures_.find(texture) != tracked_textures_.end(); |
| } |
| |
| vk::CommandBuffer TrackedObjectsVK::GetCommandBuffer() const { |
| return *buffer_; |
| } |
| |
| DescriptorPoolVK& TrackedObjectsVK::GetDescriptorPool() { |
| return desc_pool_; |
| } |
| |
| GPUProbe& TrackedObjectsVK::GetGPUProbe() const { |
| return *probe_.get(); |
| } |
| |
| } // namespace impeller |