forked from mirrors/linux
		
	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
					
				
					 1 changed files with 28 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -88,11 +88,20 @@
 | 
			
		|||
#                                                                              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])
 | 
			
		||||
 | 
			
		||||
from __future__ import print_function
 | 
			
		||||
 | 
			
		||||
import sys
 | 
			
		||||
import weakref
 | 
			
		||||
import threading
 | 
			
		||||
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 os
 | 
			
		||||
from PySide.QtCore import *
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +111,15 @@ from decimal import *
 | 
			
		|||
from ctypes import *
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
def tohex(ip):
 | 
			
		||||
| 
						 | 
				
			
			@ -1004,10 +1022,6 @@ class ChildDataItemFinder():
 | 
			
		|||
 | 
			
		||||
glb_chunk_sz = 10000
 | 
			
		||||
 | 
			
		||||
# size of pickled integer big enough for record size
 | 
			
		||||
 | 
			
		||||
glb_nsz = 8
 | 
			
		||||
 | 
			
		||||
# Background process for SQL data fetcher
 | 
			
		||||
 | 
			
		||||
class SQLFetcherProcess():
 | 
			
		||||
| 
						 | 
				
			
			@ -1066,7 +1080,7 @@ class SQLFetcherProcess():
 | 
			
		|||
				return True
 | 
			
		||||
			if space >= glb_nsz:
 | 
			
		||||
				# 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.local_head = 0
 | 
			
		||||
		if self.local_tail - self.local_head > sz:
 | 
			
		||||
| 
						 | 
				
			
			@ -1084,9 +1098,9 @@ class SQLFetcherProcess():
 | 
			
		|||
			self.wait_event.wait()
 | 
			
		||||
 | 
			
		||||
	def AddToBuffer(self, obj):
 | 
			
		||||
		d = cPickle.dumps(obj, cPickle.HIGHEST_PROTOCOL)
 | 
			
		||||
		d = pickle.dumps(obj, pickle.HIGHEST_PROTOCOL)
 | 
			
		||||
		n = len(d)
 | 
			
		||||
		nd = cPickle.dumps(n, cPickle.HIGHEST_PROTOCOL)
 | 
			
		||||
		nd = pickle.dumps(n, pickle.HIGHEST_PROTOCOL)
 | 
			
		||||
		sz = n + glb_nsz
 | 
			
		||||
		self.WaitForSpace(sz)
 | 
			
		||||
		pos = self.local_head
 | 
			
		||||
| 
						 | 
				
			
			@ -1198,12 +1212,12 @@ class SQLFetcher(QObject):
 | 
			
		|||
		pos = self.local_tail
 | 
			
		||||
		if len(self.buffer) - pos < glb_nsz:
 | 
			
		||||
			pos = 0
 | 
			
		||||
		n = cPickle.loads(self.buffer[pos : pos + glb_nsz])
 | 
			
		||||
		n = pickle.loads(self.buffer[pos : pos + glb_nsz])
 | 
			
		||||
		if n == 0:
 | 
			
		||||
			pos = 0
 | 
			
		||||
			n = cPickle.loads(self.buffer[0 : glb_nsz])
 | 
			
		||||
			n = pickle.loads(self.buffer[0 : 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
 | 
			
		||||
		return obj
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -2973,7 +2987,7 @@ class DBRef():
 | 
			
		|||
 | 
			
		||||
def Main():
 | 
			
		||||
	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")
 | 
			
		||||
 | 
			
		||||
	dbname = sys.argv[1]
 | 
			
		||||
| 
						 | 
				
			
			@ -2986,8 +3000,8 @@ def Main():
 | 
			
		|||
 | 
			
		||||
	is_sqlite3 = False
 | 
			
		||||
	try:
 | 
			
		||||
		f = open(dbname)
 | 
			
		||||
		if f.read(15) == "SQLite format 3":
 | 
			
		||||
		f = open(dbname, "rb")
 | 
			
		||||
		if f.read(15) == b'SQLite format 3':
 | 
			
		||||
			is_sqlite3 = True
 | 
			
		||||
		f.close()
 | 
			
		||||
	except:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue