# CreateView()

> Creates the view controller’s view. Unity calls this method automatically when it is about to display the view controller’s view for the first time.

## Definition

* **Type:** Method
* **Namespace:** [Unity.Profiling.Editor](/engine/6000.5/script-reference/unity/profiling/editor.md)
* **Assembly:** UnityEditor.CoreModule

```csharp
protected abstract VisualElement CreateView()
```

### Returns

| Type                                                                                     | Description                                                                                                                     |
| ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| [VisualElement](/engine/6000.5/script-reference/unityengine/uielements/visualelement.md) | Returns the view controller’s view. A [VisualElement](/engine/6000.5/script-reference/unityengine/uielements/visualelement.md). |

### Remarks

You must override this method to construct the view controller’s view hierarchy. To do this, load a visual tree from a [UXML file](/engine/6000.5/manual/uitoolkits/uielements/uie-structure-ui/uie-uxml/uie-writing-uxmltemplate.md), or construct a view directly in C#, as shown in the example code.

```csharp
using Unity.Profiling.Editor;
using UnityEditor;
using UnityEngine.UIElements;

public class SingleCounterViewController : ProfilerModuleViewController
{
    ProfilerCounterDescriptor m_Counter;
    Label m_CounterLabel;

    public SingleCounterViewController(ProfilerWindow profilerWindow, ProfilerCounterDescriptor counter) : base(profilerWindow)
    {
        m_Counter = counter;
    }

    protected override VisualElement CreateView()
    {
        // Create a simple view with a single label.
        var view = new VisualElement();
        m_CounterLabel = new Label();
        view.Add(m_CounterLabel);

        // Subscribe to Profiler window SelectedFrameIndexChanged event.
        ProfilerWindow.SelectedFrameIndexChanged += OnSelectedFrameIndexChanged;

        // Populate label with counter value in selected frame.
        ReloadData();

        return view;
    }

    protected override void Dispose(bool disposing)
    {
        if (!disposing)
            return;

        // Unsubscribe from Profiler window SelectedFrameIndexChanged event.
        ProfilerWindow.SelectedFrameIndexChanged -= OnSelectedFrameIndexChanged;

        base.Dispose(disposing);
    }

    void OnSelectedFrameIndexChanged(long selectedFrame)
    {
        // Update label with counter value in selected frame.
        ReloadData();
    }

    void ReloadData()
    {
        // Update label text with formatted counter value in selected frame.
        var selectedFrameIndexInt32 = System.Convert.ToInt32(ProfilerWindow.selectedFrameIndex);
        var formattedCounterValue = UnityEditorInternal.ProfilerDriver.GetFormattedCounterValue(selectedFrameIndexInt32, m_Counter.CategoryName, m_Counter.Name);
        m_CounterLabel.text = $"{m_Counter}: {formattedCounterValue}";
    }
}
```

Additional Resources: [ProfilerWindow.SelectedFrameIndexChanged](/engine/6000.5/script-reference/unityeditor/profilerwindow/selectedframeindexchanged.md), [ProfilerModule](/engine/6000.5/script-reference/unity/profiling/editor/profilermodule.md), [ProfilerCounterDescriptor](/engine/6000.5/script-reference/unity/profiling/editor/profilercounterdescriptor.md).
