> Development branch documentation — commit c5a119d39ba4c149dc90ed5711c4e76759080b41
> Package versions: @zenfg/webgpu 0.2.0, @zenfg/snapshot 0.1.1, @zenfg/inspector 0.2.0, zenfg 0.2.0, zenfg-snapshot 0.1.1
> Source: https://github.com/uinosoft/zenfg/blob/c5a119d39ba4c149dc90ed5711c4e76759080b41/packages/webgpu/examples/resource-pool-control.ts

# webgpu: resource-pool-control

This is the complete, compile-checked package recipe. The caller owns the device and application state.

```ts
/**
 * Source: Original ZenFG package recipe.
 * Demonstrates: Scoped resize cleanup and application-controlled idle eviction.
 * Flow: Execute one size, stop its plan, clear its scope, execute another size, evict idle cache.
 * The caller owns the device; ZenFG owns transient allocation and submission.
 * Read next: README.md and Core Concepts for pool ownership and execution counts.
 */
import { FrameGraph, type FrameGraphRecording, type ResourcePoolScope } from '@zenfg/webgpu';

/** Records a scoped clear-only target; no application pipelines are required. */
export function recordScopedTarget(frame: FrameGraphRecording, scope: ResourcePoolScope, width: number): void {
  const target = frame.createTexture({ label: 'viewport', format: 'rgba8unorm', size: [width, 4] }, { scope });
  frame.render({ label: 'clear viewport', colorAttachments: [{ target, loadOp: 'clear', storeOp: 'store' }], sideEffect: true });
}

/** Demonstrates cleanup between synchronous executions, without waiting for GPU completion. */
export function runResourcePoolControl(device: GPUDevice): void {
  const graph = new FrameGraph(device);
  try {
    const scope = graph.createResourcePoolScope();
    const oldFrame = graph.beginFrame();
    recordScopedTarget(oldFrame, scope, 4);
    oldFrame.compile().execute();
    // Stop executing the old-size plan before clearing: old plans remain re-executable.
    graph.clearResourcePool(scope);
    const newFrame = graph.beginFrame();
    recordScopedTarget(newFrame, scope, 8);
    newFrame.compile().execute();
    graph.evictResourcePool(info => info.scope === scope && info.unusedExecutions > 60);
  } finally {
    graph.destroy();
  }
}

```
