class_docstr: BaseCanvasBackend(vispy_canvas, capability, context_type)
  
  Abstract class that provides an interface between backends and Canvas.
  Each backend must implement a subclass of CanvasBackend, and
  implement all its _vispy_xxx methods. Also, a backend must
  make sure to generate the following events: 'initialize', 'resize',
  'draw', 'mouse_press', 'mouse_release', 'mouse_move',
  'mouse_wheel', 'key_press', 'key_release'. When a backend detects
  that the canvas should be closed, the backend should call
  'self._vispy_canvas.close', because the close event is handled within
  the canvas itself.
class_docstr_tok: ["BaseCanvasBackend","(","vispy_canvas",",","capability",",","context_type",")","Abstract","class","that","provides","an","interface","between","backends","and","Canvas",".","Each","backend","must","implement","a","subclass","of","CanvasBackend",",","and","implement","all","its","_vispy_xxx","methods",".","Also",",","a","backend","must","make","sure","to","generate","the","following","events",":","'initialize","'",",","'resize","'",",","'draw","'",",","'mouse_press","'",",","'mouse_release","'",",","'mouse_move","'",",","'mouse_wheel","'",",","'key_press","'",",","'key_release","'",".","When","a","backend","detects","that","the","canvas","should","be","closed",",","the","backend","should","call","'self._vispy_canvas.close","'",",","because","the","close","event","is","handled","within","the","canvas","itself","."]
docstr: Simple utility to retrieve kwargs in predetermined order.
  Also checks whether the values of the backend arguments do not
  violate the backend capabilities.
code: def _process_backend_kwargs(self, kwargs):
      """Simple utility to retrieve kwargs in predetermined order.
      Also checks whether the values of the backend arguments do not
      violate the backend capabilities.
      """
      # Verify given argument with capability of the backend
      app = self._vispy_canvas.app
      capability = app.backend_module.capability
      if kwargs["context"].shared.name:  # name already assigned: shared
          if not capability["context"]:
              raise RuntimeError(
                  "Cannot share context with this backend"
              )
      for key in [key for (key, val) in capability.items() if not val]:
          if key in ["context", "multi_window", "scroll"]:
              continue
          invert = key in ["resizable", "decorate"]
          if bool(kwargs[key]) - invert:
              raise RuntimeError(
                  "Config %s is not supported by backend %s"
                  % (key, app.backend_name)
              )
  
      # Return items in sequence
      out = SimpleBunch()
      keys = [
          "title",
          "size",
          "position",
          "show",
          "vsync",
          "resizable",
          "decorate",
          "fullscreen",
          "parent",
          "context",
          "always_on_top",
      ]
      for key in keys:
          out[key] = kwargs[key]
      return out
  
imports: from ..util import SimpleBunch
  import time
  from timeit import default_timer
label_desc: Use image node_id 2 for calling the BaseCanvasBackend obj's underlying member method code with example usage: obj._process_backend_kwargs(kwargs) and returns: out