class_docstr: Manage profile data for each run, each run may have multiple workers and spans.
  We should manage profile data of each (worker, span) unit.
  Besides, a special worker "all" is created to merge all profile data for distributed view.
class_docstr_tok: ["Manage","profile","data","for","each","run",",","each","run","may","have","multiple","workers","and","spans",".","We","should","manage","profile","data","of","each","(","worker",",","span",")","unit",".","Besides",",","a","special","worker","``","all","''","is","created","to","merge","all","profile","data","for","distributed","view","."]
docstr: Return all views supported in current run data.
docstr_tok: ["Return","all","views","supported","in","current","run","data","."]
code: def get_views(self):
      """
      Return all views supported in current run data.
      """
      all_views = set()
      for worker, span_data in self.profiler_data.items():
          for span, profiler_data in span_data.items():
              all_views.update(profiler_data.get_views())
      ordered_views = [
          "Overview",
          "Operator",
          "GPU Kernel",
          "Distributed",
          "Trace",
          "Memory",
      ]
      final_views = []
      for view in ordered_views:
          if view in all_views:
              final_views.append(view)
      return final_views
  
file_path: VisualDL/visualdl/component/profiler/run_manager.py
imports: from collections import defaultdict
  from threading import Thread
  from .profiler_data import DistributedProfilerData
  from .profiler_data import ProfilerData
label_desc: Use image node_id 4 for calling the RunManager obj's underlying member method code with example usage: obj.get_views() and returns: final_views