code: def performance_log_message(self):
          
          message = m.Message()
          table = m.Table(style_class='table table-condensed table-striped')
          row = m.Row()
          row.add(m.Cell(tr('Function'), header=True))
          row.add(m.Cell(tr('Time'), header=True))
          if setting(key='memory_profile', expected_type=bool):
              row.add(m.Cell(tr('Memory'), header=True))
          table.add(row)
  
          if self.performance_log is None:
              message.add(table)
              return message
  
          indent = -1
  
          def display_tree(tree, space):
              space += 1
              new_row = m.Row()
  
              # This is a kind of hack to display the tree with indentation
              text = '|'
              text += '*' * space
  
              if tree.children:
                  text += '\ '
              else:
                  text += '| '
              text += tree.__str__()
  
              busy = tr('Busy')
              new_row.add(m.Cell(text))
              time = tree.elapsed_time
              if time is None:
                  time = busy
              new_row.add(m.Cell(time))
              if setting(key='memory_profile', expected_type=bool):
                  memory_used = tree.memory_used
                  if memory_used is None:
                      memory_used = busy
                  new_row.add(m.Cell(memory_used))
              table.add(new_row)
              if tree.children:
                  for child in tree.children:
                      display_tree(child, space)
              space -= 1
  
          # noinspection PyTypeChecker
          display_tree(self.performance_log, indent)
          message.add(table)
  
          return message
docs: Return the profiling log as a message.