docstr: Records timing information for a server resource.
  
  :param name: The name of the resource.
  :type name: string
  
  :param duration: The time in seconds to report. Internally, this
      is rounded to the nearest millisecond.
  :type duration: float or None
  
  :param description: A description of the resource.
  :type description: string or None
docstr_tok: ["Records","timing","information","for","a","server","resource",".",":","param","name",":","The","name","of","the","resource",".",":","type","name",":","string",":","param","duration",":","The","time","in","seconds","to","report",".","Internally",",","this","is","rounded","to","the","nearest","millisecond",".",":","type","duration",":","float","or","None",":","param","description",":","A","description","of","the","resource",".",":","type","description",":","string","or","None"]
code: def record_timing(name, duration=None, description=None):
      """Records timing information for a server resource.
  
      :param name: The name of the resource.
      :type name: string
  
      :param duration: The time in seconds to report. Internally, this
          is rounded to the nearest millisecond.
      :type duration: float or None
  
      :param description: A description of the resource.
      :type description: string or None
      """
      timing_information = getattr(flask.g, "timing_information", {})
  
      if name in timing_information:
          raise KeyError(f'Duplicate resource name "{name}" found.')
  
      timing_information[name] = {
          "dur": round(duration * 1000),
          "desc": description,
      }
  
      setattr(flask.g, "timing_information", timing_information)
  
imports: import functools
  import warnings
  import json
  import contextvars
  import flask
  from .None import exceptions
  from ._utils import AttributeDict
label_desc: Use image node_id 12 for calling the CallbackContext obj's underlying member method code with example usage: obj.record_timing(name, duration, description) without return types