The Widget Pools view displays a paginated list of all Widget Pools in the snapshot in a tabular manner, grouped by the Widget Pool type and organized by Total Memory (KB) in descending order. A Widget Pool is a memory management tool used in the ABL programming environment to manage dynamic objects, such as user interface widgets. It helps prevent memory leaks by grouping related dynamic objects together and ensuring they are properly cleaned up when no longer needed. The view captures the following types of Widget Pools:
  • Unnamed Widget Pool—Created automatically by the AVM for each class or procedure and is scoped to the created class or procedure, with only one pool per class or procedure. The AVM automatically manages the lifecycle of an unnamed Widget Pool.
    Note: The session Widget Pool also referred to as the Unnamed Session Widget Pool is the default memory container for dynamic widgets when no other widget pool is explicitly in scope. It is implicitly created by the AVM. While the session widget pool lives for the entire session, an unnamed widget pool scoped to a procedure or class is temporary and is destroyed when that scope ends.
  • Named Widget Pool—Identifiable by a user-defined name, it allows explicit management and control over its lifecycle, and multiple named Widget Pools can exist within a session.
The list of Widget Pools displays the following columns, which you can select or deselect from the Primary Column Selection list using the column picker available in the table:
Table 1. Widget Pool details
Column name Description
Type Specifies the type of Widget Pool as either of the following:
  • Widget Pool
  • Named Widget Pool
Instance Count Specifies the count of instances of the Widget Pool that exist in memory at the time of the snapshot.
Total Memory (KB) Specifies the sum of memory used by each instance of the Widget Pool. You can use this column to sort the rows.
Note: The Type column is always visible and cannot be deselected.

Analyze Widget Pool object set

Expand each Widget Pool to see a paginated list of the objects present under it. By knowing the number of objects present for a specific procedure in a snapshot, you can understand how your application manages dynamic UI components and other resources. When you expand a Widget Pool entry, it displays the following details about the objects in the Widget Pool, organized by Memory (KB) in descending order:
Table 2. Widget Pool object details
Column name Description
ID Specifies a unique identifier for the Widget Pool.
Name Specifies the name of the named Widget Pool.
For an unnamed Widget Pool, the column value defaults to either of the following:
  • Session Widget Pool
  • unnamed
Memory (KB) Specifies the sum of the memory used (in KB) by the selected Widget Pool object and the memory used by the objects that are scoped to it. You can use this column to sort the rows.
Base Memory (KB) Specifies the amount of memory used (in KB) by the object.
Scoped to Specifies the object that determines the lifecycle of the Widget Pool. The Widget Pool is created when the object is instantiated and cleaned up when the object is disposed. A Widget Pool has many objects scoped to it, and the Widget Pool itself may be scoped to an OOABL or Procedure object.
All columns are displayed by default. You can customize the table view by selecting or deselecting columns using the column picker, available through the Secondary Column Selection menu.
Note: The Name column is always visible and cannot be deselected.

Analyze Widget Pool object call stack

Clicking an object row opens a panel displaying the Call Stack, which tracks the sequence of execution of Widget Pool creation in the application. Call stacks are critical as they help you understand which parts of the application code were run. To copy the whole stack, click the copy icon in the title bar. Because you can only view one Widget Pool at a time, copying the call stack into a text editor creates a clear and accessible record of the execution sequence for debugging, analyzing, and collaboration purposes.