Admin Panel

import StringIO
from amitools.vamos.libcore import LibProfileData, LibFuncProfileData, LibProfiler
from amitools.fd import read_lib_fd
from amitools.vamos.cfgcore import ConfigDict
from amitools.vamos.profiler import MainProfiler


def libcore_profile_func_data_test():
  func_data = LibFuncProfileData(42)
  assert func_data.get_func_id() == 42
  assert func_data.get_num_calls() == 0
  assert func_data.get_deltas() is None
  assert func_data.get_sum_delta() == 0.0
  assert func_data.get_avg_delta() == 0.0
  # count some calls
  func_data.count(1.0)
  func_data.count(2.0)
  func_data.count(3.0)
  assert func_data.get_num_calls() == 3
  assert func_data.get_deltas() is None
  assert func_data.get_sum_delta() == 6.0
  assert func_data.get_avg_delta() == 2.0
  # to/from dict
  data_dict = func_data.get_data()
  func_data2 = LibFuncProfileData.from_dict(data_dict)
  assert func_data2 == func_data
  # ne
  func_data3 = LibFuncProfileData(23)
  assert func_data != func_data3
  # str
  assert func_data.dump(
      "Foo") == "Foo                        3 calls    6000.000 ms  avg    2000.000 ms  None"


def libcore_profile_func_data_samples_test():
  func_data = LibFuncProfileData(42, True)
  assert func_data.get_func_id() == 42
  assert func_data.get_num_calls() == 0
  assert func_data.get_deltas() == []
  assert func_data.get_sum_delta() == 0.0
  assert func_data.get_avg_delta() == 0.0
  # count some calls
  func_data.count(1.0)
  func_data.count(2.0)
  func_data.count(3.0)
  assert func_data.get_num_calls() == 3
  assert func_data.get_deltas() == [1.0, 2.0, 3.0]
  assert func_data.get_sum_delta() == 6.0
  assert func_data.get_avg_delta() == 2.0
  # to/from dict
  data_dict = func_data.get_data()
  func_data2 = LibFuncProfileData.from_dict(data_dict, True)
  assert func_data2 == func_data
  # ne
  func_data3 = LibFuncProfileData(23)
  assert func_data != func_data3


def libcore_profile_data_test():
  # from fd
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfileData(fd)
  # get func
  func_name = "Input"
  func = fd.get_func_by_name(func_name)
  idx = func.get_index()
  func_prof = prof.get_func_by_index(idx)
  assert func_prof
  assert func_prof.get_func_id() == idx
  assert prof.get_func_by_name(func_name) == func_prof
  # count
  func_prof.count(1.0)
  func_prof.count(2.0)
  func_prof.count(3.0)
  assert prof.get_total() == (3, 6.0, 2.0)
  assert prof.get_total_str() == \
      "LIB TOTAL                  3 calls    6000.000 ms" \
      "  avg    2000.000 ms"
  prof.remove_empty()
  assert [x for x in prof.get_all_funcs()] == [(func_name, func_prof)]
  # to/from dict
  data_dict = prof.get_data()
  prof2 = LibProfileData.from_dict(data_dict)
  assert prof == prof2
  # get func
  prof2.setup_func_table(fd)
  func_prof2 = prof2.get_func_by_index(idx)
  assert func_prof == func_prof2


def libcore_profile_data_samples_test():
  # from fd
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfileData(fd, True)
  # get func
  func_name = "Input"
  func = fd.get_func_by_name(func_name)
  idx = func.get_index()
  func_prof = prof.get_func_by_index(idx)
  assert func_prof
  assert func_prof.get_func_id() == idx
  # count
  func_prof.count(1.0)
  func_prof.count(2.0)
  func_prof.count(3.0)
  assert prof.get_total() == (3, 6.0, 2.0)
  assert prof.get_total_str() == \
      "LIB TOTAL                  3 calls    6000.000 ms" \
      "  avg    2000.000 ms"
  prof.remove_empty()
  # to/from dict
  data_dict = prof.get_data()
  prof2 = LibProfileData.from_dict(data_dict)
  assert prof == prof2
  # get func
  prof2.setup_func_table(fd)
  func_prof2 = prof2.get_func_by_index(func.get_index())
  assert func_prof == func_prof2


def libcore_profile_profiler_default_test():
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfiler(names=[name])
  prof.setup()
  p = prof.create_profile(name, fd)
  assert p
  assert prof.create_profile('bla', fd) is None
  assert prof.get_profile(name) == p
  assert prof.get_num_libs() == 1
  assert prof.get_all_lib_names() == [name]
  prof.shutdown()


def libcore_profiler_profiler_set_get_data_test():
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfiler(names=[name])
  prof.setup()
  p = prof.create_profile(name, fd)
  data = prof.get_data()
  prof2 = LibProfiler()
  assert prof2.set_data(data)
  p2 = prof2.get_profile(name)
  assert p == p2


def libcore_profiler_profiler_config_test():
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfiler()
  prof.parse_config(ConfigDict({
      "names": [name],
      "calls": True
  }))
  prof.setup()
  p = prof.create_profile(name, fd)
  data = prof.get_data()
  prof2 = LibProfiler()
  assert prof2.set_data(data)
  p2 = prof2.get_profile(name)
  assert p == p2


def libcore_profiler_profiler_reuse_test():
  name = 'dos.library'
  fd = read_lib_fd(name)
  prof = LibProfiler()
  prof.parse_config(ConfigDict({
      "names": [name],
      "calls": True
  }))
  prof.setup()
  p = prof.create_profile(name, fd)
  assert p
  f = p.get_func_by_name("Input")
  assert f
  idx = f.get_func_id()
  assert p.get_func_by_index(idx) == f
  f.count(1.0)
  # store/restore
  data = prof.get_data()
  prof2 = LibProfiler()
  assert prof2.set_data(data)
  prof2.setup()
  # reuse profile
  p2 = prof2.create_profile(name, fd)
  assert p == p2
  f2 = p2.get_func_by_name("Input")
  assert f2.get_num_calls() == 1
  f2.count(1.0)
  assert f2.get_num_calls() == 2
  idx = f2.get_func_id()
  assert p2.get_func_by_index(idx) == f2


def libcore_profiler_main_profiler_test():
  name = 'dos.library'
  fd = read_lib_fd(name)
  cfg = ConfigDict({
      "enabled": True,
      "libs": {
          "names": [name],
          "calls": True
      },
      "output": {
          "file": None,
          "append": False,
          "dump": True
      }
  })
  mp = MainProfiler()
  prof = LibProfiler()
  assert mp.parse_config(cfg)
  assert mp.add_profiler(prof)
  mp.setup()
  assert prof.names == [name]
  assert prof.add_calls
  p = prof.create_profile(name, fd)
  assert p
  mp.shutdown()