perf script python: Add Python3 support to exported-sql-viewer.py
Support both Python2 and Python3 in the exported-sql-viewer.py script. The use of 'from __future__' implies the minimum supported Python2 version is now v2.6 Signed-off-by: Tony Jones <tonyj@suse.de> Acked-by: Adrian Hunter <adrian.hunter@intel.com> Link: http://lkml.kernel.org/r/20190309000518.2438-2-tonyj@suse.de Signed-off-by: Seeteena Thoufeek <s1seetee@linux.vnet.ibm.com> Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
75065a85a9
commit
beda0e725e
|
@ -88,11 +88,20 @@
|
||||||
# 7fab593ea956 48 89 15 3b 13 22 00 movq %rdx, 0x22133b(%rip)
|
# 7fab593ea956 48 89 15 3b 13 22 00 movq %rdx, 0x22133b(%rip)
|
||||||
# 8107675243232 2 ls 22011 22011 hardware interrupt No 7fab593ea956 _dl_start+0x26 (ld-2.19.so) -> ffffffff86a012e0 page_fault ([kernel])
|
# 8107675243232 2 ls 22011 22011 hardware interrupt No 7fab593ea956 _dl_start+0x26 (ld-2.19.so) -> ffffffff86a012e0 page_fault ([kernel])
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import weakref
|
import weakref
|
||||||
import threading
|
import threading
|
||||||
import string
|
import string
|
||||||
import cPickle
|
try:
|
||||||
|
# Python2
|
||||||
|
import cPickle as pickle
|
||||||
|
# size of pickled integer big enough for record size
|
||||||
|
glb_nsz = 8
|
||||||
|
except ImportError:
|
||||||
|
import pickle
|
||||||
|
glb_nsz = 16
|
||||||
import re
|
import re
|
||||||
import os
|
import os
|
||||||
from PySide.QtCore import *
|
from PySide.QtCore import *
|
||||||
|
@ -102,6 +111,15 @@ from decimal import *
|
||||||
from ctypes import *
|
from ctypes import *
|
||||||
from multiprocessing import Process, Array, Value, Event
|
from multiprocessing import Process, Array, Value, Event
|
||||||
|
|
||||||
|
# xrange is range in Python3
|
||||||
|
try:
|
||||||
|
xrange
|
||||||
|
except NameError:
|
||||||
|
xrange = range
|
||||||
|
|
||||||
|
def printerr(*args, **keyword_args):
|
||||||
|
print(*args, file=sys.stderr, **keyword_args)
|
||||||
|
|
||||||
# Data formatting helpers
|
# Data formatting helpers
|
||||||
|
|
||||||
def tohex(ip):
|
def tohex(ip):
|
||||||
|
@ -1004,10 +1022,6 @@ class ChildDataItemFinder():
|
||||||
|
|
||||||
glb_chunk_sz = 10000
|
glb_chunk_sz = 10000
|
||||||
|
|
||||||
# size of pickled integer big enough for record size
|
|
||||||
|
|
||||||
glb_nsz = 8
|
|
||||||
|
|
||||||
# Background process for SQL data fetcher
|
# Background process for SQL data fetcher
|
||||||
|
|
||||||
class SQLFetcherProcess():
|
class SQLFetcherProcess():
|
||||||
|
@ -1066,7 +1080,7 @@ class SQLFetcherProcess():
|
||||||
return True
|
return True
|
||||||
if space >= glb_nsz:
|
if space >= glb_nsz:
|
||||||
# Use 0 (or space < glb_nsz) to mean there is no more at the top of the buffer
|
# Use 0 (or space < glb_nsz) to mean there is no more at the top of the buffer
|
||||||
nd = cPickle.dumps(0, cPickle.HIGHEST_PROTOCOL)
|
nd = pickle.dumps(0, pickle.HIGHEST_PROTOCOL)
|
||||||
self.buffer[self.local_head : self.local_head + len(nd)] = nd
|
self.buffer[self.local_head : self.local_head + len(nd)] = nd
|
||||||
self.local_head = 0
|
self.local_head = 0
|
||||||
if self.local_tail - self.local_head > sz:
|
if self.local_tail - self.local_head > sz:
|
||||||
|
@ -1084,9 +1098,9 @@ class SQLFetcherProcess():
|
||||||
self.wait_event.wait()
|
self.wait_event.wait()
|
||||||
|
|
||||||
def AddToBuffer(self, obj):
|
def AddToBuffer(self, obj):
|
||||||
d = cPickle.dumps(obj, cPickle.HIGHEST_PROTOCOL)
|
d = pickle.dumps(obj, pickle.HIGHEST_PROTOCOL)
|
||||||
n = len(d)
|
n = len(d)
|
||||||
nd = cPickle.dumps(n, cPickle.HIGHEST_PROTOCOL)
|
nd = pickle.dumps(n, pickle.HIGHEST_PROTOCOL)
|
||||||
sz = n + glb_nsz
|
sz = n + glb_nsz
|
||||||
self.WaitForSpace(sz)
|
self.WaitForSpace(sz)
|
||||||
pos = self.local_head
|
pos = self.local_head
|
||||||
|
@ -1198,12 +1212,12 @@ class SQLFetcher(QObject):
|
||||||
pos = self.local_tail
|
pos = self.local_tail
|
||||||
if len(self.buffer) - pos < glb_nsz:
|
if len(self.buffer) - pos < glb_nsz:
|
||||||
pos = 0
|
pos = 0
|
||||||
n = cPickle.loads(self.buffer[pos : pos + glb_nsz])
|
n = pickle.loads(self.buffer[pos : pos + glb_nsz])
|
||||||
if n == 0:
|
if n == 0:
|
||||||
pos = 0
|
pos = 0
|
||||||
n = cPickle.loads(self.buffer[0 : glb_nsz])
|
n = pickle.loads(self.buffer[0 : glb_nsz])
|
||||||
pos += glb_nsz
|
pos += glb_nsz
|
||||||
obj = cPickle.loads(self.buffer[pos : pos + n])
|
obj = pickle.loads(self.buffer[pos : pos + n])
|
||||||
self.local_tail = pos + n
|
self.local_tail = pos + n
|
||||||
return obj
|
return obj
|
||||||
|
|
||||||
|
@ -2973,7 +2987,7 @@ class DBRef():
|
||||||
|
|
||||||
def Main():
|
def Main():
|
||||||
if (len(sys.argv) < 2):
|
if (len(sys.argv) < 2):
|
||||||
print >> sys.stderr, "Usage is: exported-sql-viewer.py {<database name> | --help-only}"
|
printerr("Usage is: exported-sql-viewer.py {<database name> | --help-only}");
|
||||||
raise Exception("Too few arguments")
|
raise Exception("Too few arguments")
|
||||||
|
|
||||||
dbname = sys.argv[1]
|
dbname = sys.argv[1]
|
||||||
|
@ -2986,8 +3000,8 @@ def Main():
|
||||||
|
|
||||||
is_sqlite3 = False
|
is_sqlite3 = False
|
||||||
try:
|
try:
|
||||||
f = open(dbname)
|
f = open(dbname, "rb")
|
||||||
if f.read(15) == "SQLite format 3":
|
if f.read(15) == b'SQLite format 3':
|
||||||
is_sqlite3 = True
|
is_sqlite3 = True
|
||||||
f.close()
|
f.close()
|
||||||
except:
|
except:
|
||||||
|
|
Loading…
Reference in New Issue