NextSoftware.py 4.66 KB
Newer Older
Alberto Gonzalez's avatar
Alberto Gonzalez committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
import lldb


# Synthetic view for static_vector objects
class static_vector_SynthChildProvider:
  def __init__( self, valobj, dict ):
    self.valobj = valobj

  def num_children( self ):
    size = self.valobj.GetChildMemberWithName( '_size' ).GetValueAsUnsigned()
    return size + 2

  def has_children( self ):
    return self.num_children() != 0

  def get_child_at_index( self, index ):
    if index < 0:
      return None
    if index >= self.num_children():
      return None
    if index == self.num_children() - 2:
      return self.valobj.GetChildMemberWithName( '_arr' )
    if index == self.num_children() - 1:
      return self.valobj.GetChildMemberWithName( '_size' )
    arr = self.valobj.GetChildMemberWithName( '_arr' )
    return arr.GetChildAtIndex(index)

  def update( self ):
    pass


# Summary for UnitArea objects
def static_vector_SummaryProvider( valobj, dict ):
  size = valobj.GetNumChildren() - 2
  return 'size=' + str( size )

# Synthetic view for UnitArea objects
class UnitArea_SynthChildProvider:
  def __init__( self, valobj, dict ):
    self.valobj = valobj

  def num_children( self ):
    blocks = self.valobj.GetChildMemberWithName( 'blocks' )
    size = blocks.GetChildMemberWithName( '_size' ).GetValueAsUnsigned()
    return size + 3

  def has_children( self ):
    return True

  def get_child_at_index( self, index ):
    if index < 0:
      return None
    if index >= self.num_children():
      return None
    if index == 0:
      return self.valobj.GetChildMemberWithName( 'chromaFormat' )
    if index == self.num_children()-2:
      return self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_arr' )
    if index == self.num_children()-1:
      return self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_size' )
    if index > 0:
      arr = self.valobj.GetChildMemberWithName( 'blocks' ).GetChildMemberWithName( '_arr' )
      return arr.GetChildAtIndex( index - 1 )

  def update( self ):
    pass

# Summary for Area objects
def Area_SummaryProvider( valobj, dict ):
  x      = valobj.GetChildMemberWithName( 'x' ).GetValueAsUnsigned()
  y      = valobj.GetChildMemberWithName( 'y' ).GetValueAsUnsigned()
  width  = valobj.GetChildMemberWithName( 'width' ).GetValueAsUnsigned()
  height = valobj.GetChildMemberWithName( 'height' ).GetValueAsUnsigned()
  return 'x=' + str( x ) + ', y=' + str( y ) + ', width=' + str( width ) + ', height=' + str( height )

# Summary for CompArea objects
def CompArea_SummaryProvider( valobj, dict ):
  compid = valobj.GetChildMemberWithName( 'compID' ).GetValueAsUnsigned()
  if compid == 0:
    comp = 'Y '
  elif compid == 1:
    comp = 'Cb '
  elif compid == 2:
    comp = 'Cr '
  elif compid == 3:
    comp = 'Cb2 '
  elif compid == 4:
    comp = 'Cr2 '
  else:
    comp = 'invalid '
  return comp + Area_SummaryProvider( valobj, dict)

# Summary for UnitArea objects
def UnitArea_SummaryProvider( valobj, dict ):
  area = valobj.GetChildAtIndex( 1 )
  return Area_SummaryProvider( area, dict)

# Summary for CodingUnit objects
def CodingUnit_SummaryProvider( valobj, dict ):
  area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
  return 'CU: ' + Area_SummaryProvider( area, dict)

# Summary for PredictionUnit objects
def PredictionUnit_SummaryProvider( valobj, dict ):
  area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
  return 'PU: ' + Area_SummaryProvider( area, dict)

# Summary for TransformUnit objects
def TransformUnit_SummaryProvider( valobj, dict ):
  area = valobj.GetChildMemberWithName( 'blocks' ).GetChildAtIndex( 0 )
  return 'TU: ' + Area_SummaryProvider( area, dict)

def __lldb_init_module( debugger, dict ):
  debugger.HandleCommand( 'type synthetic add -l NextSoftware.static_vector_SynthChildProvider -x "static_vector<.*>$"' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.static_vector_SummaryProvider -e -x "static_vector<.*>$"' )
#  debugger.HandleCommand( 'type summary add --summary-string size=${svar%#} -e -x "static_vector<.*>$"' )
  debugger.HandleCommand( 'type synthetic add -l NextSoftware.UnitArea_SynthChildProvider UnitArea' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.UnitArea_SummaryProvider -e  UnitArea' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.Area_SummaryProvider -e Area' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.CompArea_SummaryProvider -e CompArea' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.CodingUnit_SummaryProvider -e CodingUnit' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.PredictionUnit_SummaryProvider -e PredictionUnit' )
  debugger.HandleCommand( 'type summary add -F NextSoftware.TransformUnit_SummaryProvider -e TransformUnit' )