PageRenderTime 46ms CodeModel.GetById 12ms RepoModel.GetById 0ms app.codeStats 0ms

/rpython/jit/backend/test/jitlog_test.py

https://bitbucket.org/pypy/pypy/
Python | 80 lines | 69 code | 7 blank | 4 comment | 7 complexity | 5d6135e051c1f60f83d9966d18eea362 MD5 | raw file
Possible License(s): AGPL-3.0, BSD-3-Clause, Apache-2.0
  1. import re
  2. import os
  3. from rpython.rlib import debug
  4. from rpython.jit.tool.oparser import pure_parse
  5. from rpython.jit.metainterp import logger
  6. from rpython.jit.metainterp.typesystem import llhelper
  7. from rpython.rlib.rjitlog import rjitlog as jl
  8. from StringIO import StringIO
  9. from rpython.jit.metainterp.optimizeopt.util import equaloplists
  10. from rpython.jit.metainterp.history import AbstractDescr, JitCellToken, BasicFailDescr, BasicFinalDescr
  11. from rpython.jit.backend.model import AbstractCPU
  12. from rpython.rlib.jit import JitDriver
  13. from rpython.rlib.objectmodel import always_inline
  14. from rpython.jit.metainterp.test.support import LLJitMixin
  15. from rpython.rlib.rjitlog import rjitlog
  16. import tempfile
  17. class LoggerTest(LLJitMixin):
  18. def test_explicit_enable(self, tmpdir):
  19. file = tmpdir.join('jitlog')
  20. fileno = os.open(file.strpath, os.O_WRONLY | os.O_CREAT)
  21. enable_jitlog = lambda: rjitlog.enable_jitlog(fileno)
  22. f = self.run_sample_loop(enable_jitlog)
  23. self.meta_interp(f, [10, 0])
  24. assert os.path.exists(file.strpath)
  25. with file.open('rb') as f:
  26. # check the file header
  27. assert f.read(3) == jl.MARK_JITLOG_HEADER + jl.JITLOG_VERSION_16BIT_LE
  28. assert len(f.read()) > 0
  29. def test_env(self, monkeypatch, tmpdir):
  30. file = tmpdir.join('jitlog')
  31. monkeypatch.setenv("JITLOG", file.strpath)
  32. f = self.run_sample_loop(None)
  33. self.meta_interp(f, [10,0])
  34. assert os.path.exists(file.strpath)
  35. with file.open('rb') as fd:
  36. # check the file header
  37. assert fd.read(3) == jl.MARK_JITLOG_HEADER + jl.JITLOG_VERSION_16BIT_LE
  38. assert len(fd.read()) > 0
  39. def test_version(self, monkeypatch, tmpdir):
  40. file = tmpdir.join('jitlog')
  41. monkeypatch.setattr(jl, 'JITLOG_VERSION_16BIT_LE', '\xff\xfe')
  42. monkeypatch.setenv("JITLOG", file.strpath)
  43. f = self.run_sample_loop(None)
  44. self.meta_interp(f, [10,0])
  45. assert os.path.exists(file.strpath)
  46. with file.open('rb') as fd:
  47. # check the file header
  48. assert fd.read(3) == jl.MARK_JITLOG_HEADER + '\xff\xfe'
  49. assert len(fd.read()) > 0
  50. def test_version(self, monkeypatch, tmpdir):
  51. file = tmpdir.join('jitlog')
  52. monkeypatch.setattr(jl, 'JITLOG_VERSION_16BIT_LE', '\xff\xfe')
  53. monkeypatch.setenv("JITLOG", file.strpath)
  54. f = self.run_sample_loop(None)
  55. self.meta_interp(f, [10,0])
  56. assert os.path.exists(file.strpath)
  57. with file.open('rb') as fd:
  58. # check the file header
  59. assert fd.read(3) == jl.MARK_JITLOG_HEADER + '\xff\xfe'
  60. assert len(fd.read()) > 0
  61. def run_sample_loop(self, func, myjitdriver = None):
  62. if not myjitdriver:
  63. myjitdriver = JitDriver(greens = [], reds = 'auto')
  64. def f(y, x):
  65. res = 0
  66. if func:
  67. func()
  68. while y > 0:
  69. myjitdriver.jit_merge_point()
  70. res += x
  71. y -= 1
  72. return res
  73. return f