Instance Method

addCompletedHandler:

Registers a block of code that Metal calls immediately after the GPU finishes executing the commands in the command buffer.

Required.

Declaration

- (void)addCompletedHandler:(MTLCommandBufferHandler)block;

Parameters

block

A block of code to be invoked.

Discussion

You can register multiple handlers for the same command buffer. You can’t add a completion handler after you commit the command buffer.

The buffer calls the completion handlers after it finishes execution. Check the status property to determine whether execution was successful or had errors.

Listing 1 demonstrates how to use the GPUEndTime and GPUStartTime properties to determine how long it took the GPU to execute the command buffer.

Listing 1

Obtaining timestamp reflection data

[commandBuffer addCompletedHandler:^(id<MTLCommandBuffer> cb) {
    CFTimeInterval executionDuration = cb.GPUEndTime - cb.GPUStartTime;
    /* ... */
}];

See Also

Scheduling and Executing Commands

- enqueue

Reserves a place for the command buffer on the associated command queue.

Required.

- commit

Commits the command buffer for execution.

Required.

- addScheduledHandler:

Registers a block of code that Metal calls immediately after it schedules the command buffer for execution on the GPU.

Required.

- waitUntilScheduled

Blocks execution of the current thread until the command buffer is scheduled.

Required.

- waitUntilCompleted

Blocks execution of the current thread until execution of the command buffer is completed.

Required.

MTLCommandBufferHandler

A block of code invoked when a command buffer is scheduled for execution or has completed execution.