class_docstr: A class used to interface with the Ray control state.
  
  Attributes:
      global_state_accessor: The client used to query gcs table from gcs
          server.
class_docstr_tok: ["A","class","used","to","interface","with","the","Ray","control","state",".","Attributes",":","global_state_accessor",":","The","client","used","to","query","gcs","table","from","gcs","server","."]
docstr: Return a list of profiling events that can viewed as a timeline.
  
  To view this information as a timeline, simply dump it as a json file
  by passing in "filename" or using using json.dump, and then load go to
  chrome://tracing in the Chrome web browser and load the dumped file.
  Make sure to enable "Flow events" in the "View Options" menu.
  
  Args:
      filename: If a filename is provided, the timeline is dumped to that
          file.
  
  Returns:
      If filename is not provided, this returns a list of profiling
          events. Each profile event is a dictionary.
docstr_tok: ["Return","a","list","of","profiling","events","that","can","viewed","as","a","timeline",".","To","view","this","information","as","a","timeline",",","simply","dump","it","as","a","json","file","by","passing","in","``","filename","''","or","using","using","json.dump",",","and","then","load","go","to","chrome",":","\/\/tracing","in","the","Chrome","web","browser","and","load","the","dumped","file",".","Make","sure","to","enable","``","Flow","events","''","in","the","``","View","Options","''","menu",".","Args",":","filename",":","If","a","filename","is","provided",",","the","timeline","is","dumped","to","that","file",".","Returns",":","If","filename","is","not","provided",",","this","returns","a","list","of","profiling","events",".","Each","profile","event","is","a","dictionary","."]
code: def chrome_tracing_dump(self, filename=None):
      """Return a list of profiling events that can viewed as a timeline.
  
      To view this information as a timeline, simply dump it as a json file
      by passing in "filename" or using using json.dump, and then load go to
      chrome://tracing in the Chrome web browser and load the dumped file.
      Make sure to enable "Flow events" in the "View Options" menu.
  
      Args:
          filename: If a filename is provided, the timeline is dumped to that
              file.
  
      Returns:
          If filename is not provided, this returns a list of profiling
              events. Each profile event is a dictionary.
      """
      # TODO(rkn): Support including the task specification data in the
      # timeline.
      # TODO(rkn): This should support viewing just a window of time or a
      # limited number of events.
  
      self._check_connected()
  
      # Add a small delay to account for propagation delay of events to the GCS.
      # This should be harmless enough but prevents calls to timeline() from
      # missing recent timeline data.
      import time
  
      time.sleep(1)
  
      profile_events = self.profile_events()
      all_events = []
  
      for component_id_hex, component_events in profile_events.items():
          # Only consider workers and drivers.
          component_type = component_events[0]["component_type"]
          if component_type not in ["worker", "driver"]:
              continue
  
          for event in component_events:
              new_event = {
                  # The category of the event.
                  "cat": event["event_type"],
                  # The string displayed on the event.
                  "name": event["event_type"],
                  # The identifier for the group of rows that the event
                  # appears in.
                  "pid": event["node_ip_address"],
                  # The identifier for the row that the event appears in.
                  "tid": event["component_type"]
                  + ":"
                  + event["component_id"],
                  # The start time in microseconds.
                  "ts": self._nanoseconds_to_microseconds(
                      event["start_time"]
                  ),
                  # The duration in microseconds.
                  "dur": self._nanoseconds_to_microseconds(
                      event["end_time"] - event["start_time"]
                  ),
                  # What is this?
                  "ph": "X",
                  # This is the name of the color to display the box in.
                  "cname": self._default_color_mapping[
                      event["event_type"]
                  ],
                  # The extra user-defined data.
                  "args": event["extra_data"],
              }
  
              # Modify the json with the additional user-defined extra data.
              # This can be used to add fields or override existing fields.
              if "cname" in event["extra_data"]:
                  new_event["cname"] = event["extra_data"]["cname"]
              if "name" in event["extra_data"]:
                  new_event["name"] = event["extra_data"]["name"]
  
              all_events.append(new_event)
  
      if not all_events:
          logger.warning(
              "No profiling events found. Ray profiling must be enabled "
              "by setting RAY_PROFILING=1, and make sure "
              "RAY_task_events_report_interval_ms is a positive value (default 1000)."
          )
  
      if filename is not None:
          with open(filename, "w") as outfile:
              json.dump(all_events, outfile)
      else:
          return all_events
  
imports: import json
  import logging
  from collections import defaultdict
  from typing import Set
  from google.protobuf.json_format import MessageToDict
  import ray
  from ray._private.client_mode_hook import client_mode_hook
  from ray._private.resource_spec import NODE_ID_PREFIX, HEAD_NODE_RESOURCE_NAME
  from ray._private.utils import binary_to_hex, decode, hex_to_binary, validate_actor_state_name
  from ray._raylet import GlobalStateAccessor
  from ray.core.generated import common_pb2
  from ray.core.generated import gcs_pb2
  from ray.util.annotations import DeveloperAPI
label_desc: Use image node_id 16 for calling the GlobalState obj's underlying member method code with example usage: obj.chrome_tracing_dump(filename) and returns: all_events