{
    "description": [
        "Copyright 2019 The ANGLE Project Authors. All rights reserved.",
        "Use of this source code is governed by a BSD-style license that can be",
        "found in the LICENSE file.",
        "",
        "overlay_widgets.json: Layout of Overlay widgets.",
        "",
        "Data for every overlay widget 'Widget' is a map with the following keys:",
        "",
        " - type: one of WidgetType types (with constructor params), such as 'PerSecond' or",
        "         'RunningGraph(64)'",
        " - color: in [R,G,B,A] format where every value is in [0,255]",
        " - coords: in [X,Y] which is the distance from the edges of the window, with negative",
        "           values representing distance from the right/bottom edge.  If a value is given",
        "           in the form of 'Widget2.<edge>.<mode>', the calculated value for <edge> in",
        "           Widget2 is used.  <edge> is one of:",
        "            - 'left', 'right': valid for x",
        "            - 'top', 'bottom': valid for y",
        "           <mode> is one of:",
        "            - 'align': the requested value is used",
        "            - 'adjacent': the value is calculated such that two widgets become adjacent.",
        "           Optionally, Widget2.desc.<edge>.<mode> can be used to align with a graph's",
        "           implicit text widget",
        " - font: for Text widgets, one of 'large' or 'small'",
        " - length: for Text widgets, maximum number of characters for this widget",
        " - bar_width: for Graph widgets, size of each graph bar.",
        " - height: for Graph widgets, the height of the graph.",
        " - match_to: a reference to another widget",
        " - description: for Graph widgets, data for the attached Text widget.  This is a map with",
        "         the same Text keys as above except type, which is implicitly Text."
    ],
    "widgets": [
        {
            "name": "FPS",
            "comment": "Frames per second (Count/Second).",
            "type": "PerSecond",
            "color": [127, 191, 255, 255],
            "coords": [10, 10],
            "font": "large",
            "length": 12
        },
        {
            "name": "VulkanLastValidationMessage",
            "comment": "Last validation error (Text).",
            "type": "Text",
            "color": [255, 0, 0, 255],
            "coords": [10, -10],
            "font": "small",
            "length": 150
        },
        {
            "name": "VulkanValidationMessageCount",
            "comment": "Number of validation errors and warnings (Count).",
            "type": "Count",
            "color": [255, 0, 0, 255],
            "coords": [10, "VulkanLastValidationMessage.top.adjacent"],
            "font": "small",
            "length": 25
        },
        {
            "name": "VulkanRenderPassCount",
            "comment": "Number of RenderPasses in a frame (Count).",
            "type": "RunningGraph(60)",
            "color": [75, 200, 0, 200],
            "coords": [10, 100],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [75, 200, 0, 255],
                "coords": ["VulkanRenderPassCount.left.align", "VulkanRenderPassCount.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanSecondaryCommandBufferPoolWaste",
            "comment": "Secondary Command Buffer pool memory waste (Bytes).",
            "type": "RunningHistogram(50)",
            "color": [255, 200, 75, 200],
            "coords": [-50, 100],
            "bar_width": 6,
            "height": 100,
            "description": {
                "color": [255, 200, 75, 255],
                "coords": ["VulkanSecondaryCommandBufferPoolWaste.left.align",
                           "VulkanSecondaryCommandBufferPoolWaste.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanWriteDescriptorSetCount",
            "comment": "Number of Descriptor Set writes in a frame (Count).",
            "type": "RunningGraph(60)",
            "color": [75, 200, 0, 200],
            "coords": [10, 220],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [75, 200, 0, 255],
                "coords": ["VulkanWriteDescriptorSetCount.left.align", "VulkanWriteDescriptorSetCount.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanDescriptorSetAllocations",
            "comment": "Descriptor Set Allocations.",
            "type": "RunningGraph(60)",
            "color": [255, 0, 75, 200],
            "coords": [0, 250],
            "bar_width": 6,
            "height": 100,
            "description": {
                "color": [255, 0, 75, 255],
                "coords": ["VulkanDescriptorSetAllocations.left.align",
                           "VulkanDescriptorSetAllocations.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanShaderResourceDSHitRate",
            "comment": "Shader Resource Descriptor Set Cache Hit Rate.",
            "type": "RunningGraph(60)",
            "color": [255, 0, 75, 200],
            "coords": [-50, 360],
            "bar_width": 6,
            "height": 100,
            "description": {
                "color": [255, 0, 75, 255],
                "coords": ["VulkanShaderResourceDSHitRate.left.align",
                           "VulkanShaderResourceDSHitRate.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanDynamicBufferAllocations",
            "comment": "Buffer Allocations Made By vk::DynamicBuffer.",
            "type": "RunningGraph(120)",
            "color": [0, 200, 75, 200],
            "coords": [-50, -50],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanDynamicBufferAllocations.right.align",
                           "VulkanDynamicBufferAllocations.top.adjacent"],
                "font": "small",
                "length": 40
            }
        },
        {
            "name": "VulkanDescriptorCacheSize",
            "comment": "Total size of all descriptor set caches",
            "type": "RunningGraph(60)",
            "color": [0, 200, 185, 200],
            "coords": [0, 450],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanDescriptorCacheSize.left.align",
                           "VulkanDescriptorCacheSize.top.adjacent"],
                "font": "small",
                "length": 90
            }
        },
        {
            "name": "VulkanTextureDescriptorCacheSize",
            "comment": "Number of cached Texture descriptor sets",
            "type": "RunningGraph(60)",
            "color": [0, 200, 75, 200],
            "coords": [0, 450],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanTextureDescriptorCacheSize.left.align",
                           "VulkanTextureDescriptorCacheSize.top.adjacent"],
                "font": "small",
                "length": 90
            }
        },
        {
            "name": "VulkanUniformDescriptorCacheSize",
            "comment": "Number of cached default uniform descriptor sets",
            "type": "RunningGraph(60)",
            "color": [0, 200, 255, 200],
            "coords": [0, 450],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanUniformDescriptorCacheSize.left.align",
                           "VulkanUniformDescriptorCacheSize.top.adjacent"],
                "font": "small",
                "length": 90
            }
        },
        {
            "name": "VulkanDescriptorCacheKeySize",
            "comment": "Total size of all keys in the descriptor set caches",
            "type": "Count",
            "color": [255, 255, 255, 255],
            "coords": [10, 100],
            "font": "small",
            "length": 30
        },
        {
            "name": "VulkanAttemptedSubmissions",
            "comment": "Number of times the Vulkan backend attempted to submit commands",
            "type": "RunningGraph(60)",
            "color": [255, 0, 0, 100],
            "coords": [-50, 50],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [200, 0, 75, 255],
                "coords": ["VulkanAttemptedSubmissions.left.align",
                           "VulkanAttemptedSubmissions.top.adjacent"],
                "font": "small",
                "length": 45
            }
        },
        {
            "name": "VulkanActualSubmissions",
            "comment": "Number of times the Vulkan backend actually submitted commands",
            "type": "RunningGraph(60)",
            "color": [0, 255, 0, 200],
            "coords": ["VulkanAttemptedSubmissions.left.align",
                       "VulkanAttemptedSubmissions.top.align"],
            "bar_width": 5,
            "height": 100,
            "match_to": "VulkanAttemptedSubmissions",
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanActualSubmissions.left.align",
                           "VulkanActualSubmissions.bottom.adjacent"],
                "font": "small",
                "length": 45
            }
        },
        {
            "name": "VulkanPipelineCacheLookups",
            "comment": "Number of times the Vulkan backend has looked up the pipeline cache",
            "type": "RunningGraph(60)",
            "color": [0, 255, 0, 100],
            "coords": [-50, -50],
            "bar_width": 5,
            "height": 100,
            "description": {
                "color": [0, 200, 75, 255],
                "coords": ["VulkanPipelineCacheLookups.left.align",
                           "VulkanPipelineCacheLookups.top.adjacent"],
                "font": "small",
                "length": 45
            }
        },
        {
            "name": "VulkanPipelineCacheMisses",
            "comment": "Number of times the Vulkan backend has missed the pipeline cache",
            "type": "RunningGraph(60)",
            "color": [255, 0, 0, 200],
            "coords": ["VulkanPipelineCacheLookups.left.align",
                       "VulkanPipelineCacheLookups.top.align"],
            "bar_width": 5,
            "height": 100,
            "match_to": "VulkanPipelineCacheLookups",
            "description": {
                "color": [200, 0, 75, 255],
                "coords": ["VulkanPipelineCacheLookups.desc.left.align",
                           "VulkanPipelineCacheLookups.desc.top.adjacent"],
                "font": "small",
                "length": 45
            }
        },
        {
            "name": "VulkanTotalPipelineCacheMissTimeMs",
            "comment": "Total time spent creating pipelines that missed the cache.",
            "type": "Count",
            "color": [255, 0, 0, 255],
            "coords": ["VulkanPipelineCacheMisses.left.align",
                       "VulkanPipelineCacheMisses.bottom.adjacent"],
            "font": "small",
            "length": 45
        },
        {
            "name": "VulkanTotalPipelineCacheHitTimeMs",
            "comment": "Total time spent creating pipelines that hit the cache.",
            "type": "Count",
            "color": [0, 255, 0, 255],
            "coords": ["VulkanTotalPipelineCacheMissTimeMs.left.align",
                       "VulkanTotalPipelineCacheMissTimeMs.bottom.adjacent"],
            "font": "small",
            "length": 45
        }
    ]
}
