Received: by 2002:a25:5b86:0:0:0:0:0 with SMTP id p128csp1544671ybb; Fri, 29 Mar 2019 06:40:06 -0700 (PDT) X-Google-Smtp-Source: APXvYqzDeCsdFsrlO8am1cpqcy+qax5LyBQp+O1s18+eASNKMNHXY2lETwJxTr6Txh8RyWiO8WpR X-Received: by 2002:a63:c23:: with SMTP id b35mr5788871pgl.298.1553866806375; Fri, 29 Mar 2019 06:40:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553866806; cv=none; d=google.com; s=arc-20160816; b=F6Pf8axmG3tb+FWJpkGcRvaCl1eGsE4k4obwA8vXa2byVEpYyQdBf2bpj0NIRkPibk q8e47QTu8jFIlH+5Q++wGVjbT++G1PimBOK3Va9Qce+zYg8SrbPyIKW8d6BuvFSKhrIG uiu3r+JDadiEx1unbL1qYTlZ36nFndjUi/TfLcKt7zP4GPg5w9lvoDiGgvxc9kX8Iv18 K4EseZwf9YTIZbwsW+ELBuN0JDburQtgr2gwXmthdkftK9gholmcBiyYiK6HUM2HKdUX sFIFdM93dJOu4cMd7TidCgNhOKPPl+jNi9PC6M/V4FVogaJtWVe9Xw6cyA0EczzzST+G 1o7A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=xvDOtRaGe+YbOJ/dhw7AYPu2p/YibeCbztfbWXk7cqw=; b=MUS8LP9zMxeWTAd4JX4QNS73i76ZsKYmBW2fIp+1C/3MBlQk4hF2BMJvF6HsxACKOu ZYl+EndvJlD08Fk8jbXTi9vO7JPq0xp7hfxpRchgSGHcbkrx1i3A9Zchl8LrQ1TnfKbU LzOG7mWDEkrH9Ke91A/Hs53XgCsSt/0+u+8hu6QcwUrImP+KioyGe72gfGnX+OOEqXtG 6QAPlq7kl6ki2+lh8GdTEzBX9HpncmF36hWB/3b8aRyiVrU+pz2/xD7W6FAmyvMc2Yat Hdsp+jtAQY6iPLZuXhYxbyQ0Fyc5bBizhraK0DY7xt7AbyBjhfStYnrOY3ygdjilUY/M bKAA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="gG/KqEu1"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bg12si1944822plb.295.2019.03.29.06.39.50; Fri, 29 Mar 2019 06:40:06 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="gG/KqEu1"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729869AbfC2Niw (ORCPT + 99 others); Fri, 29 Mar 2019 09:38:52 -0400 Received: from mail.kernel.org ([198.145.29.99]:34142 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729859AbfC2Niv (ORCPT ); Fri, 29 Mar 2019 09:38:51 -0400 Received: from quaco.ghostprotocols.net (unknown [190.15.121.82]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id EA4A4217F5; Fri, 29 Mar 2019 13:38:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1553866730; bh=UhmJPMkFjyovv2I6MnaFQyIuIEUz4C99GXKx91aKJwA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=gG/KqEu1FfUMGc3WGUZJRiya2ql5Hu++ahkrlOKxVYMgDgVuJEujt7bzXi1QpVlIr vpfccnv1h9TDboPkDeli/7mA0+zihdR8VE3rOAdooXeMAPeMPXd8CigG9+tZmEh+Ft vyx2UYK/2Sb4Gaq+Jc8OI7P97qvk3iG4zY44PvfU= From: Arnaldo Carvalho de Melo To: Ingo Molnar , Thomas Gleixner Cc: Jiri Olsa , Namhyung Kim , Clark Williams , linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, Adrian Hunter , Jiri Olsa , Arnaldo Carvalho de Melo Subject: [PATCH 11/13] perf scripts python: exported-sql-viewer.py: Fix never-ending loop Date: Fri, 29 Mar 2019 10:37:59 -0300 Message-Id: <20190329133801.21004-12-acme@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190329133801.21004-1-acme@kernel.org> References: <20190329133801.21004-1-acme@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Adrian Hunter pyside version 1 fails to handle python3 large integers in some cases, resulting in Qt getting into a never-ending loop. This affects: samples Table samples_view Table All branches Report Selected branches Report Add workarounds for those cases. Signed-off-by: Adrian Hunter Cc: Jiri Olsa Fixes: beda0e725e5f ("perf script python: Add Python3 support to exported-sql-viewer.py") Link: http://lkml.kernel.org/r/20190327072826.19168-2-adrian.hunter@intel.com Signed-off-by: Arnaldo Carvalho de Melo --- .../scripts/python/exported-sql-viewer.py | 60 +++++++++++++++---- 1 file changed, 50 insertions(+), 10 deletions(-) diff --git a/tools/perf/scripts/python/exported-sql-viewer.py b/tools/perf/scripts/python/exported-sql-viewer.py index e38518cdcbc3..0cf30956064a 100755 --- a/tools/perf/scripts/python/exported-sql-viewer.py +++ b/tools/perf/scripts/python/exported-sql-viewer.py @@ -107,6 +107,7 @@ import os from PySide.QtCore import * from PySide.QtGui import * from PySide.QtSql import * +pyside_version_1 = True from decimal import * from ctypes import * from multiprocessing import Process, Array, Value, Event @@ -1526,6 +1527,19 @@ def BranchDataPrep(query): " (" + dsoname(query.value(15)) + ")") return data +def BranchDataPrepWA(query): + data = [] + data.append(query.value(0)) + # Workaround pyside failing to handle large integers (i.e. time) in python3 by converting to a string + data.append("{:>19}".format(query.value(1))) + for i in xrange(2, 8): + data.append(query.value(i)) + data.append(tohex(query.value(8)).rjust(16) + " " + query.value(9) + offstr(query.value(10)) + + " (" + dsoname(query.value(11)) + ")" + " -> " + + tohex(query.value(12)) + " " + query.value(13) + offstr(query.value(14)) + + " (" + dsoname(query.value(15)) + ")") + return data + # Branch data model class BranchModel(TreeModel): @@ -1553,7 +1567,11 @@ class BranchModel(TreeModel): " AND evsel_id = " + str(self.event_id) + " ORDER BY samples.id" " LIMIT " + str(glb_chunk_sz)) - self.fetcher = SQLFetcher(glb, sql, BranchDataPrep, self.AddSample) + if pyside_version_1 and sys.version_info[0] == 3: + prep = BranchDataPrepWA + else: + prep = BranchDataPrep + self.fetcher = SQLFetcher(glb, sql, prep, self.AddSample) self.fetcher.done.connect(self.Update) self.fetcher.Fetch(glb_chunk_sz) @@ -2079,14 +2097,6 @@ def IsSelectable(db, table, sql = ""): return False return True -# SQL data preparation - -def SQLTableDataPrep(query, count): - data = [] - for i in xrange(count): - data.append(query.value(i)) - return data - # SQL table data model item class SQLTableItem(): @@ -2110,7 +2120,7 @@ class SQLTableModel(TableModel): self.more = True self.populated = 0 self.column_headers = column_headers - self.fetcher = SQLFetcher(glb, sql, lambda x, y=len(column_headers): SQLTableDataPrep(x, y), self.AddSample) + self.fetcher = SQLFetcher(glb, sql, lambda x, y=len(column_headers): self.SQLTableDataPrep(x, y), self.AddSample) self.fetcher.done.connect(self.Update) self.fetcher.Fetch(glb_chunk_sz) @@ -2154,6 +2164,12 @@ class SQLTableModel(TableModel): def columnHeader(self, column): return self.column_headers[column] + def SQLTableDataPrep(self, query, count): + data = [] + for i in xrange(count): + data.append(query.value(i)) + return data + # SQL automatic table data model class SQLAutoTableModel(SQLTableModel): @@ -2182,8 +2198,32 @@ class SQLAutoTableModel(SQLTableModel): QueryExec(query, "SELECT column_name FROM information_schema.columns WHERE table_schema = '" + schema + "' and table_name = '" + select_table_name + "'") while query.next(): column_headers.append(query.value(0)) + if pyside_version_1 and sys.version_info[0] == 3: + if table_name == "samples_view": + self.SQLTableDataPrep = self.samples_view_DataPrep + if table_name == "samples": + self.SQLTableDataPrep = self.samples_DataPrep super(SQLAutoTableModel, self).__init__(glb, sql, column_headers, parent) + def samples_view_DataPrep(self, query, count): + data = [] + data.append(query.value(0)) + # Workaround pyside failing to handle large integers (i.e. time) in python3 by converting to a string + data.append("{:>19}".format(query.value(1))) + for i in xrange(2, count): + data.append(query.value(i)) + return data + + def samples_DataPrep(self, query, count): + data = [] + for i in xrange(9): + data.append(query.value(i)) + # Workaround pyside failing to handle large integers (i.e. time) in python3 by converting to a string + data.append("{:>19}".format(query.value(9))) + for i in xrange(10, count): + data.append(query.value(i)) + return data + # Base class for custom ResizeColumnsToContents class ResizeColumnsToContentsBase(QObject): -- 2.20.1