blob: aa8c176ea1bc6644ade4c6993996382d8eb238fe [file] [log] [blame]
// Copyright 2018 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.
#ifndef COMPONENTS_VIZ_COMMON_RESOURCES_BITMAP_ALLOCATION_H_
#define COMPONENTS_VIZ_COMMON_RESOURCES_BITMAP_ALLOCATION_H_
#include <memory>
#include "components/viz/common/resources/resource_format.h"
#include "components/viz/common/viz_common_export.h"
#include "mojo/public/cpp/system/buffer.h"
namespace base {
class SharedMemory;
}
namespace gfx {
class Size;
} // namespace gfx
namespace viz {
namespace bitmap_allocation {
// Allocates a shared memory segment to hold |size| pixels in RGBA_8888
// format. Crashes if allocation does not succeed. The returned SharedMemory
// will be mapped.
VIZ_COMMON_EXPORT std::unique_ptr<base::SharedMemory> AllocateMappedBitmap(
const gfx::Size& size,
ResourceFormat format);
// For a bitmap created with AllocateMappedBitmap(), this will duplicate the
// handle to be passed to the display compositor, which can be in another
// process. The handle must be duplicated because we want to close the handle
// once it is mapped in this process. This will then close the original file
// handle in |memory| to free it up to the operating system. Some platforms
// have very limited namespaces for file handle counts and this avoids running
// out of them. Pass the same |size| as to AllocateMappedBitmap(), for
// debugging assistance.
VIZ_COMMON_EXPORT mojo::ScopedSharedBufferHandle DuplicateAndCloseMappedBitmap(
base::SharedMemory* memory,
const gfx::Size& size,
ResourceFormat format);
// Similar to DuplicateAndCloseMappedBitmap(), but to be used in cases where the
// SharedMemory will have to be duplicated more than once. In that case the
// handle must be kept valid, so it can not be closed. Beware this will keep an
// open file handle on posix systems, which may contribute to surpassing handle
// limits.
VIZ_COMMON_EXPORT
mojo::ScopedSharedBufferHandle DuplicateWithoutClosingMappedBitmap(
const base::SharedMemory* memory,
const gfx::Size& size,
ResourceFormat format);
} // namespace bitmap_allocation
} // namespace viz
#endif // COMPONENTS_VIZ_COMMON_RESOURCES_BITMAP_ALLOCATION_H_