blob: da8826af75ede361ff8ee1ea43c920ba44d1f9ad [file] [log] [blame]
rsesek5c7c3e92016-01-05 03:37:111// Copyright 2015 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_GFX_MAC_IO_SURFACE_H_
6#define UI_GFX_MAC_IO_SURFACE_H_
7
8#include <IOSurface/IOSurface.h>
9#include <mach/mach.h>
10
11#include "base/mac/scoped_cftyperef.h"
12#include "ui/gfx/buffer_types.h"
Sunny Sachanandani88353d22017-10-26 01:52:2413#include "ui/gfx/color_space.h"
rsesek5c7c3e92016-01-05 03:37:1114#include "ui/gfx/generic_shared_memory_id.h"
15#include "ui/gfx/geometry/size.h"
16#include "ui/gfx/gfx_export.h"
17
18namespace gfx {
19
20namespace internal {
21
22struct IOSurfaceMachPortTraits {
23 GFX_EXPORT static mach_port_t InvalidValue() { return MACH_PORT_NULL; }
24 GFX_EXPORT static mach_port_t Retain(mach_port_t);
25 GFX_EXPORT static void Release(mach_port_t);
26};
27
ccameron69a2dae2016-03-28 03:23:4528struct ScopedInUseIOSurfaceTraits {
29 static IOSurfaceRef InvalidValue() { return nullptr; }
30 static IOSurfaceRef Retain(IOSurfaceRef io_surface) {
31 CFRetain(io_surface);
32 IOSurfaceIncrementUseCount(io_surface);
33 return io_surface;
34 }
35 static void Release(IOSurfaceRef io_surface) {
36 IOSurfaceDecrementUseCount(io_surface);
37 CFRelease(io_surface);
38 }
39};
40
rsesek5c7c3e92016-01-05 03:37:1141} // namespace internal
42
43using IOSurfaceId = GenericSharedMemoryId;
44
45// Helper function to create an IOSurface with a specified size and format.
46GFX_EXPORT IOSurfaceRef CreateIOSurface(const Size& size, BufferFormat format);
47
48// A scoper for handling Mach port names that are send rights for IOSurfaces.
49// This scoper is both copyable and assignable, which will increase the kernel
50// reference count of the right. On destruction, the reference count is
51// decremented.
52using ScopedRefCountedIOSurfaceMachPort =
53 base::ScopedTypeRef<mach_port_t, internal::IOSurfaceMachPortTraits>;
54
ccameron69a2dae2016-03-28 03:23:4555// A scoper for holding a reference to an IOSurface and also incrementing its
56// in-use counter while the scoper exists.
57using ScopedInUseIOSurface =
58 base::ScopedTypeRef<IOSurfaceRef, internal::ScopedInUseIOSurfaceTraits>;
59
Sunny Sachanandani88353d22017-10-26 01:52:2460// Set color space for given IOSurface. Color space must have an associated ICC
61// color profile otherwise this function does nothing.
62GFX_EXPORT void IOSurfaceSetColorSpace(IOSurfaceRef io_surface,
63 const gfx::ColorSpace& color_space);
64
rsesek5c7c3e92016-01-05 03:37:1165} // namespace gfx
66
67#endif // UI_GFX_MAC_IO_SURFACE_H_