blob: 25e53df7733b05e8676c1471db158d46cdb3ee76 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SRC_UI_LIB_ESCHER_IMPL_FRAME_MANAGER_H_
#define SRC_UI_LIB_ESCHER_IMPL_FRAME_MANAGER_H_
#include <queue>
#include "src/ui/lib/escher/forward_declarations.h"
#include "src/ui/lib/escher/impl/uniform_buffer_pool.h"
#include "src/ui/lib/escher/resources/resource_manager.h"
#include "src/ui/lib/escher/vk/command_buffer.h"
namespace escher {
namespace impl {
// Responsible for allocating new Frames and (eventually) intelligently
// recycling their per-frame memory allocations.
class FrameManager : public ResourceManager {
public:
explicit FrameManager(EscherWeakPtr escher);
~FrameManager();
FramePtr NewFrame(const char* trace_literal, uint64_t frame_number, bool enable_gpu_logging,
escher::CommandBuffer::Type requested_type, bool use_protected_memory);
private:
// |Owner::OnReceiveOwnable()|
void OnReceiveOwnable(std::unique_ptr<Resource> resource) override;
// Return a free BlockAllocator from |block_allocators_|, or a new one if none
// are free.
std::unique_ptr<BlockAllocator> GetBlockAllocator();
std::queue<std::unique_ptr<BlockAllocator>> block_allocators_;
UniformBufferPool uniform_buffer_pool_;
// The name of the default vthread for GPU trace events. This should be a
// string literal.
const char* gpu_vthread_literal_;
// The default vthread ID for GPU trace events.
const uint64_t gpu_vthread_id_;
};
} // namespace impl
} // namespace escher
#endif // SRC_UI_LIB_ESCHER_IMPL_FRAME_MANAGER_H_