Drafter.RenderCache (drafter v0.3.1)

Copy Markdown View Source

Process-dictionary cache for incremental rendering.

Tracks per-widget strip fingerprints and the last composited output so the renderer can skip recompositing rows where nothing changed.

Summary

Functions

changed_rows(prev_keys, curr_keys, bounds_y)

@spec changed_rows([term()] | nil, [term()], non_neg_integer()) ::
  MapSet.t(non_neg_integer())

Absolute screen rows that changed between two per-row cache-key lists.

bounds_y offsets the row index to a screen row. A nil previous list (the widget's first frame) marks every row dirty.

compute_directional_dirty_rows(direction, widget_bounds, screen_rect)

@spec compute_directional_dirty_rows(atom(), map(), map()) ::
  MapSet.t(non_neg_integer())

extract_layout_impact(actions)

@spec extract_layout_impact(list()) :: {boolean(), atom()}

get_all_widget_bounds()

@spec get_all_widget_bounds() :: %{required(term()) => map()}

get_app_state_hash()

@spec get_app_state_hash() :: non_neg_integer() | nil

get_composited()

@spec get_composited() :: [Drafter.Draw.Strip.t()] | nil

get_layer_count()

@spec get_layer_count() :: non_neg_integer() | nil

get_widget_bounds(widget_id)

@spec get_widget_bounds(term()) :: map() | nil

get_widget_rowkeys(widget_id)

@spec get_widget_rowkeys(term()) :: [term()] | nil

invalidate()

@spec invalidate() :: :ok

put_app_state_hash(hash)

@spec put_app_state_hash(non_neg_integer()) :: :ok

put_composited(strips)

@spec put_composited([Drafter.Draw.Strip.t()]) :: :ok

put_layer_count(count)

@spec put_layer_count(non_neg_integer()) :: :ok

put_widget_bounds(widget_id, bounds)

@spec put_widget_bounds(term(), map()) :: :ok

put_widget_rowkeys(widget_id, row_keys)

@spec put_widget_rowkeys(term(), [term()]) :: :ok

strips_fingerprint(strips)

@spec strips_fingerprint([Drafter.Draw.Strip.t()]) :: non_neg_integer()