FBSimulatorControl/Framebuffer/FBFramebuffer.h (17 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import <Foundation/Foundation.h> #import <FBControlCore/FBControlCore.h> NS_ASSUME_NONNULL_BEGIN @class IOSurface; /** A Consumer of a Framebuffer. */ @protocol FBFramebufferConsumer <NSObject> /** Called when an IOSurface becomes available or invalid @param surface the surface, or NULL if a surface is not available/becomes unavailable */ - (void)didChangeIOSurface:(nullable IOSurface *)surface; /** When a Damage Rect becomes available. @param rect the damage rectangle. */ - (void)didReceiveDamageRect:(CGRect)rect; @end /** Provides a Framebuffer to interested consumers, wrapping the underlying implementation. */ @interface FBFramebuffer : NSObject #pragma mark Initializers /** Obtains an IOSurface from the SimDeviceIOClient. @param simulator the IOClient to attach to. @param logger the logger to log to. @param error an error out for any error that occurs. @return a new FBFramebuffer if one could be constructed, nil on error. */ + (nullable instancetype)mainScreenSurfaceForSimulator:(FBSimulator *)simulator logger:(id<FBControlCoreLogger>)logger error:(NSError **)error; #pragma mark Public Methods /** Attaches a Consumer. The Consumer will be called on the provided queue. @param consumer the consumer to attach. @param queue the queue to notify the consumer on. @return A Surface is one is *immediately* available. This is not mutually exclusive the consumer being called on a queue. */ - (nullable IOSurface *)attachConsumer:(id<FBFramebufferConsumer>)consumer onQueue:(dispatch_queue_t)queue; /** Detaches a Consumer. The Consumer will be called on the provided queue. @param consumer the consumer to attach. */ - (void)detachConsumer:(id<FBFramebufferConsumer>)consumer; /** Queries if the consumer is attached. @param consumer the consumer to use. @return YES if attached, NO otherwise. */ - (BOOL)isConsumerAttached:(id<FBFramebufferConsumer>)consumer; @end NS_ASSUME_NONNULL_END