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)
 | 
					#                                                                              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 a new issue