blob: b34f1a0a34b00c6a4717df1458c0c332d93a1437 [file] [log] [blame]
// Copyright 2017 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.
#include "garnet/bin/ui/scene_manager/resources/host_memory.h"
namespace scene_manager {
const ResourceTypeInfo HostMemory::kTypeInfo = {
ResourceType::kMemory | ResourceType::kHostMemory, "HostMemory"};
HostMemory::HostMemory(Session* session,
scenic::ResourceId id,
zx::vmo vmo,
uint64_t vmo_size)
: Memory(session, id, HostMemory::kTypeInfo),
shared_vmo_(fxl::MakeRefCounted<fsl::SharedVmo>(std::move(vmo),
ZX_VM_FLAG_PERM_READ)),
size_(vmo_size) {}
HostMemoryPtr HostMemory::New(Session* session,
scenic::ResourceId id,
vk::Device device,
const scenic::MemoryPtr& args,
ErrorReporter* error_reporter) {
if (args->memory_type != scenic::MemoryType::HOST_MEMORY) {
error_reporter->ERROR() << "scene_manager::HostMemory::New(): "
"Memory must be of type HOST_MEMORY.";
return nullptr;
}
return New(session, id, device, std::move(args->vmo), error_reporter);
}
HostMemoryPtr HostMemory::New(Session* session,
scenic::ResourceId id,
vk::Device device,
zx::vmo vmo,
ErrorReporter* error_reporter) {
uint64_t vmo_size;
vmo.get_size(&vmo_size);
return fxl::MakeRefCounted<HostMemory>(session, id, std::move(vmo), vmo_size);
}
} // namespace scene_manager