CN111273980B - 界面线程可视化方法、装置、计算机设备及存储介质 - Google Patents

界面线程可视化方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN111273980B
CN111273980B CN202010038478.9A CN202010038478A CN111273980B CN 111273980 B CN111273980 B CN 111273980B CN 202010038478 A CN202010038478 A CN 202010038478A CN 111273980 B CN111273980 B CN 111273980B
Authority
CN
China
Prior art keywords
function
tree
calling
stack
interface
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010038478.9A
Other languages
English (en)
Other versions
CN111273980A (zh
Inventor
蔡少康
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Ping An Property and Casualty Insurance Company of China Ltd
Original Assignee
Ping An Property and Casualty Insurance Company of China Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ping An Property and Casualty Insurance Company of China Ltd filed Critical Ping An Property and Casualty Insurance Company of China Ltd
Priority to CN202010038478.9A priority Critical patent/CN111273980B/zh
Publication of CN111273980A publication Critical patent/CN111273980A/zh
Application granted granted Critical
Publication of CN111273980B publication Critical patent/CN111273980B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Abstract

本申请实施例属于计算机领域,涉及一种界面线程的可视化方法,包括获取界面线程的堆栈中的函数;根据每个函数在堆栈中的位置确定每个函数的栈层级和父函数;然后根据函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树,继而形成包含有多个函数树的函数森林;检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示函数森林。本申请还提供一种界面线程的可视化装置、计算机设备及存储介质。本申请能够实现界面线程的可视化,解决了现有技术中判断界面线程异常情况时存在的效率低、容易误判的问题。

Description

界面线程可视化方法、装置、计算机设备及存储介质
技术领域
本申请涉及计算机领域,尤其涉及界面线程的可视化方法、装置、计算机设备及存储介质。
背景技术
为了保证交互界面的稳定,终端设备的系统中通常会为交互界面的处理任务创建独特的界面线程。界面线程中通常只执行交互界面刷新等操作,一般不执行文件、网络等耗时较大的操作。所以当交互界面出现异常情况时,开发人员往往会通过人工查看界面线程来对异常情况进行判断,但是这种做法效率低,容易误判,例如,查看界面线程时由于是人工的实时查看,异常的任务可能已经执行完毕,此时查看界面线程已无法判断出真正的异常情况,而且人工在开发环境中查看界面线程也是一项繁琐的任务。
发明内容
本申请实施例的目的在于提出一种界面线程的可视化方法、装置、计算机设备及存储介质,以解决现有技术中判断界面线程异常情况时存在的效率低、容易误判的问题。
为了解决上述技术问题,本申请实施例提供一种界面线程的可视化方法,采用了如下所述的技术方案:
获取界面线程的堆栈中的调用函数;
根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数;
根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林;
检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林。
进一步的,所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林包括:
判断栈底函数是否存在函数森林中;
若存在,则以函数森林中的栈底函数为树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树;
若不存在,则在函数森林中将栈底函数新建为一个树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
进一步的,所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林还包括:
对函数森林中的每一个函数树的每一个节点进行检测;
在检测到同一个函数树的同一栈层级中存在相同的调用函数时,将表示同一个调用函数的节点合并为一个节点;
对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置。
进一步的,所述对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置之后还包括:
计算两个函数向量之间的相似值;
当所述相似值大于相似阈值时,计算两个调用函数的权值差值;
当所述权值差值大于追溯阈值时,将权值较大的调用函数对应的权值的一部分转移至权值较小的调用函数对应的权值。
进一步的,所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林还包括:
检测函数树中的连续单一节点组;
在检测到函数树中存在连续单一节点组时,将所述连续单一节点组收缩为一个复合节点。
进一步的,所述检测树中的连续单一节点组包括:
以一个函数树中所有节点的父函数作为一个父函数池,提取所述父函数池中仅出现一次的父函数以作为连续基准函数;
将存在互为父子函数关系的连续基准函数分为一组,并统计每组中调用函数的个数,当所述个数大于连续阈值时,将该组调用函数作为连续单一节点组。
进一步的,所述检测界面的运行是否存在卡顿情况包括:
获取界面的帧数,根据所述帧数设置帧数卡顿系数;
获取中央处理器的占用率,根据所述占用率设置处理器卡顿系数;
获取界面线程的执行时间,根据所述执行时间设置执行卡顿系数;
根据所述帧数卡顿系数、所述处理器卡顿系数和所述执行卡顿系数计算卡顿系数;
当所述卡顿系数大于所述卡顿阈值时,即判定界面的运行存在卡顿情况。
为了解决上述技术问题,本申请实施例还提供一种界面线程的可视化装置,采用了如下所述的技术方案:
获取模块,用于获取界面线程的堆栈中的调用函数;
确定模块,用于根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数;
构建模块,用于根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林;
展示模块,用于检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林。
为了解决上述技术问题,本申请实施例还提供一种计算机设备,采用了如下所述的技术方案:
一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现上述任一项的可视化方法的步骤。
为了解决上述技术问题,本申请实施例还提供一种计算机可读存储介质,采用了如下所述的技术方案:
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项的可视化方法的步骤。
与现有技术相比,本申请实施例主要有以下有益效果:
通过本申请实施例,能够获取界面线程的堆栈中的调用函数,再根据每个调用函数在堆栈中的位置确定每个调用函数的栈层级和父函数,最终根据每个调用函数的栈层级和父函数构建函数树以形成函数森林,并在界面运行卡顿的时候在交互界面展示函数森林,从而实现了界面线程的可视化,解决了现有技术中判断界面线程异常情况时存在的效率低、容易误判的问题。
附图说明
为了更清楚地说明本申请中的方案,下面将对本申请实施例描述中所需要使用的附图作一个简单介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的界面线程的可视化方法的一个实施例的流程图;
图3是通过图2的可视化方法获得的函数森林的一个示意图;
图4是图2中步骤S3的一种具体实施方式的流程图;
图5是根据本申请的界面线程的可视化方法的另一个实施例的一部分步骤;
图6是通过图5的步骤获得的函数森林的示意图;
图7是根据本申请的界面线程的可视化方法的又一个实施例的一部分步骤;
图8是通过图7的步骤获得的函数森林的示意图;
图9是图7中步骤S37的一种具体实施方式的流程图;
图10是步骤S35后的步骤的一种具体实施方式的流程图;
图11是图2中步骤S4的一种具体实施方式的流程图;
图12是根据本申请的界面线程的可视化装置的一个实施例的结构示意图;
图13是根据本申请的计算机设备的一个实施例的结构示意图。
具体实施方式
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同;本文中在申请的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本申请;本申请的说明书和权利要求书及上述附图说明中的术语“包括”和“具有”以及它们的任何变形,意图在于覆盖不排他的包含。本申请的说明书和权利要求书或上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。
在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。
为了使本技术领域的人员更好地理解本申请方案,下面将结合附图,对本申请实施例中的技术方案进行清楚、完整地描述。
如图1所示,系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如网页浏览器应用、购物类应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、电子书阅读器、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对终端设备101、102、103上显示的页面提供支持的后台服务器。
需要说明的是,本申请实施例所提供的界面线程的可视化方法一般由服务器/终 端设备执行,相应地,界面线程的可视化装置一般设置于服务器/终端设备中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
参考图2,示出了根据本申请的界面线程的可视化方法的一个实施例的流程图。所述的界面线程的可视化方法,包括以下步骤:
S1:获取界面线程的堆栈中的调用函数。
在上述步骤S1中,界面线程的堆栈中的调用函数即为该线程依次调用的函数。例如,A函数依次调用了B函数和C函数,B函数依次调用了B1函数和B2函数,C函数依次调用了C1函数和C2函数,则当界面线程在运行B1函数时,获得的堆栈中的函数为A-B-B1,若运行的是C1函数,则获得的堆栈中的函数为A-C-C1。其中,A即为栈底函数,B1和C1即为栈顶函数。
S2:根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数。
在上述步骤S2中,例如,获取到的调用函数为A-B-B1时,则确定A函数的栈层级为一级,其为栈底函数,故不存在父函数,B函数的栈层级为二级,其父函数为A,B1函数的栈层级为三级,其父函数为B。栈底函数即每次获取调用函数时堆栈中底层的函数,例如A函数。
S3:根据栈底函数和每个调用函数的栈层级、父函数构建所述函数的函数树以形成函数森林。
在上述步骤S3中,函数森林可以理解为多个函数树的集合,函数树的概念稍后描述。
进一步的,如图4所示,上述步骤S3可以包括:
S31:判断栈底函数是否存在函数森林中。
S32:若存在,则以函数森林中的栈底函数为树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
S33:若不存在,则在函数森林中将栈底函数新建为一个树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
在上述步骤S31、步骤S32和步骤S33中,每次获取调用函数后,根据每个调用函数的栈层级和父函数构建函数树时,可以这样实现:将调用函数作为函数树的节点,然后连接存在父函数关系的节点以构成函数树的拓扑结构,最终在交互界面处展示该拓扑结构。例如,依次获取到的调用函数为A-B-B1、A-B-B2、A-C-C1构建成一个函数树,获取A2-B-B1构建成另一个函数树,两个调用函数树则构建为函数森林,构建结果的示意图可以是如图3所示。
这里,形成函数树时,还可以对树中的顶点和节点赋予权值。赋予权值可以有两种实现方式:
(1)为树中的顶点和节点统一赋予初始权值,初始权值可以简单地取值为1。
(2)根据顶点被采集到的次数设置顶点的权值,例如在上面的例子中,A顶点的权值将被设置为3,A2顶点的权值将被设置为1。对于节点的权值则可以赋予相同的权值,例如统一赋值为1。
S4:检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林。
进一步地,如图11所示,所述检测界面的运行是否存在卡顿情况可以包括:
S41:获取界面的帧数,根据所述帧数设置帧数卡顿系数。
在上述步骤S41中,可以通过开发环境自有的工具来获取界面的帧数,例如IOS开发环境中的CADisplayLink。当帧数小于帧数卡顿阈值时,则将帧数卡顿系数置1,否则置0。这里,由于在30帧以下时,用户会开始感觉到卡顿,所以帧数卡顿阈值可以取值为30以下的值。
S42:获取中央处理器的占用率,根据所述占用率设置处理器卡顿系数。
在上述步骤S42中,可以通过开发环境自有的工具来获取中央处理器的占用率,例如,Java语言中的MxBean。当中央处理器的占用率大于占用卡顿阈值时,则将处理器卡顿系数置1,否则置0。这里,占用卡顿阈值可以选择为70、80、90等。
S43:获取界面线程的执行时间,根据所述执行时间设置执行卡顿系数。
在上述步骤S43中,获取界面线程的执行时间可以这样实现:获取界面线程开始执行时的系统时间和执行完毕时的系统时间,然后以两个系统时间的差值为该界面线程的执行时间。当执行时间大于执行卡顿阈值时,则将执行卡顿系数置1,否则置0。这里,执行卡顿阈值可以取值为5毫秒、10毫秒、15毫秒等。
S44:根据所述帧数卡顿系数、所述处理器卡顿系数和所述执行卡顿系数计算卡顿系数。
在上述步骤S44中,可以计算帧数卡顿系数、处理器卡顿系数和执行卡顿系数的加权和,将加权和作为卡顿系数。这里,帧数卡顿系数的权值可以设置为等于处理卡顿系数的权值和执行卡顿系数的权值两者之和。例如帧数卡顿系数为5,处理卡顿系数为3,执行卡顿系数为2。
S45:当所述卡顿系数大于所述卡顿阈值时,即判定界面的运行存在卡顿情况。
在上述步骤S45中,承接上述步骤S44中的例子,卡顿阈值可以取值为5,即界面帧数过低时,即可以判定存在卡顿情况,又或者中央处理器占用率过高且界面线程执行时间过长时,判定存在卡顿的情况。由于用户最直观的感觉来自于界面的帧数,通过这样的权值和阈值设置能够优先考虑界面的帧数情况,使得卡顿情况的判定更符合用户的感受。
进一步地,如图5所示,界面线程的可视化方法还可以包括:
S34:对函数森林中的每一个函数树的每一个节点进行检测。
S35:在检测到同一个函数树的同一栈层级中存在相同的调用函数时,将表示同一个调用函数的节点合并为一个节点。
S36:对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置。
在上述步骤S34、步骤S35和步骤S36中,可以提取同一个树中的所有节点以形成一个节点池,将节点池中相同的节点分为一组,将同组中的节点合并为一个,并计算同组中节点的个数,以节点的个数作为权值,同组节点的栈层级和父函数关系将继承至合并后的节点,最后根据新的节点以及新的栈层级和父函数关系重新构建函数树。步骤S34、步骤S35和步骤S36可以在步骤S32和步骤S33之后执行。承接上述步骤S32和上述步骤S33的例子,重新构建的函数树和函数森林的示意图如图6所示。如图6所示,在以A为顶点的函数树中,二级层级的B调用函数被合并成一个节点,权值赋值为2。
当获取到的调用函数过多时,构建的函数森林将变得复杂,此时难以从上述步骤S32和上述步骤S33后获得的函数森林直观地观察出界面线程的异常情况。通过上述步骤S34、步骤S35和步骤S36,能够将同一个函数树中重复的函数节点合并为一个,并根据合并的个数重新设置新合并节点的权值,从而能够减少函数树中节点的个数,同时通过权值来反映该调用函数的执行次数,能够使得函数树和函数森林更加地直观体现界面线程的异常情况。
进一步地,如图7所示,在上述步骤S36之后还可以包括:
S37:检测函数树中的连续单一节点组。
S38:在检测到函数树中存在连续单一节点组时,将所述连续单一节点组收缩为一个复合节点。
在本申请其他实施方式中,步骤S37和步骤S38还可以和上述节点合并的步骤(即步骤S34、步骤S35和步骤S36)并行执行。在上述步骤S37和步骤S38中,连续单一节点组是这样一个节点组:节点组中的节点依次连接,且节点组中的每个节点的父节点和子节点都仅有一个。承接上述步骤S34、步骤S35和步骤S36中的例子,A-B-B1和A-B-B2都不是连续单一节点组,A2-B-B1是连续单一节点组。将连续单一节点组收缩为一个连续节点可以是在交互界面处将连续单一节点组中的节点图形合并为一个节点图形。可选地,还可以在交互界面处将连续单一节点组收缩为一个可以点击的控件,当用户点击控件时,即将控件展开为收缩前的节点图形。例如,在上述步骤S34、步骤S35和步骤S36的例子中,在交互界面处将A2-B-B1收缩成一个可以点击的控件,当用户点击控件时,即将控件展开为收缩前的节点图形。收缩状态和展开状态可以是如图8所示。
进一步地,如图9所示,上述步骤S37可以包括:
S371:以一个函数树中所有节点的父函数作为一个父函数池,提取所述父函数池中仅出现一次的父函数以作为连续基准函数。
在上述步骤S371中,节点仅在父函数池中出现一次即表示该节点下面的子节点只有一个,即表示该节点可能是连续单一节点组中的一个节点,所以将其作为连续基准函数。
S372:将存在互为父子函数关系的连续基准函数分为一组,并统计每组中调用函数的个数,当所述个数大于连续阈值时,将该组调用函数作为连续单一节点组。
在上述步骤S372中,若连续基准函数间存在互为父子函数关系,即表明这两个基准函数之间是相互连接的节点,将存在互为父子函数关系的连续基准函数分为一组,即是将相互连接的连续基准函数分为一组。其中,判断两个调用函数之间是否存在互为父子函数关系可以通过查询调用函数的父函数中是否有另一个调用函数来实现。连续阈值可以根据实际选择,例如连续阈值取值为3,即将有3个以上连续节点的节点组作为连续单一节点组。
由于在实际执行的过程中,构建的函数树中会存在一些连续单一的节点,这些节点在交互界面展示时会占用大部分界面且这些节点通常不是造成卡顿的主要原因,所以这些节点不利于用户通过观察交互界面的函数树来判断界面线程的异常情况。通过上述步骤S81和上述步骤S82,能够检测函数树中的连续节点组,并将连续节点组收缩为一个连续节点,从而达到简化函数树的效果,能够使得函数树和函数森林更能直观地体现界面线程的异常情况。
进一步地,如图10所示,获取界面线程的堆栈中的调用函数时,还根据界面线程中的堆栈将调用函数转化为对应的函数向量,在上述步骤S35之后还可以包括:
对每两个函数向量之间进行以下处理:
S351:计算两个函数向量之间的相似值。
在上述步骤S351中,函数向量可以直接根据各函数名称的字符来确定。例如,在堆栈中的调用函数为A-B-C,A的函数名称为Compute,B的函数名称为Reverse_comm_pair,C的函数名称为MII_Send。则A函数的函数向量为(Compute),B函数的函数向量为(ComputeReverse_comm_pair),C函数的函数向量为(ComputeReverse_comm_pairMII_Send)。然后,可以通过请求第三方服务或者使用预设的字符识别模型来计算两个函数向量中的字符的相似值,以该相似值作为两个函数向量之间的相似值。
S352:当所述相似值大于相似阈值时,计算两个调用函数的权值差值。
在上述步骤S352中,相似阈值可以根据实际情况调整。例如,当上述步骤S91计算得到的相似值的范围在0-1的范围内时,相似阈值可以取值为0.6、0.7、0.8等。
S353:当所述权值差值大于追溯阈值时,将权值较大的调用函数对应的权值的一部分转移至权值较小的调用函数对应的权值。
在上述步骤S353中,追溯阈值也可以根据实际情况调整。将权值较大的调用函数对应的权值的一部分转移至权值较小的调用函数对应的权值可以是以下两种形式来实现:
(1)将较大的权值的特定比例数值转移至较小的权值。例如,较大权值的三分之一、二分之一、四分之一等。
(2)将较大的权值的特定大小的数值转移至较小的权值。例如,特定大小的数值可以取值为2、3、4、5等。
假设A函数与B函数的函数向量的相似值已大于相似阈值,A函数的权值为12,B函数的权值为2,A和B的权值差值为10,若追溯阈值为5,则将A函数的权值的二分之一转移至B函数的权值,转移后A函数的权值为6,B函数的权值为8。
由于获取界面线程的堆栈中的函数时,会存在一定的采样周期,若函数的实际运行时间小于采样周期时,该函数将有可能不被采样到,没采样到的函数的运行时间会被计算进下一个函数,例如,A函数的运行时间是20ms,B函数是A函数的下一个函数,B的运行时间是40ms,若采样周期为30ms,则A函数有可能被漏检,此时B函数将在两个采样周期都被采样,即采样后B函数的权值增加2,A函数的权值没有增加(这样的权值变化没有正确表现出实际函数的运行情况)。由于存在上述异常情况的两个调用函数通常都会是相邻的两个函数,所以通过上述步骤S351、S352能够找出相邻的函数,这些相邻的函数有可能存在上述异常情况,所以对其进行下一步的判断,另外,若是由于存在上述异常情况而导致一个函数的权值被计算至另一个函数的权值,这两个函数的权值的差值通常会比较大,所以通过步骤S353中追溯阈值的设置,能够一定程度上避免对函数树进行错误地纠正,使函数树更加准确地体现界面线程的异常情况。
在本实施例中,能够获取界面线程的堆栈中的调用函数,再根据每个调用函数在堆栈中的位置确定每个调用函数的栈层级和父函数,最终根据每个调用函数的栈层级和父函数构建函数树以形成函数森林,并在界面运行卡顿的时候在交互界面展示函数森林,从而实现了界面线程的可视化,解决了现有技术中判断界面线程异常情况时存在的效率低、容易误判的问题。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
进一步参考图12,作为对上述图2所示方法的实现,本申请提供了一种界面线程的可视化装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图12所示,本实施例所述的界面线程的可视化装置400包括:获取模块401、确定模块402、构建模块403以及展示模块404。其中:
获取模块401,用于获取界面线程的堆栈中的调用函数。
确定模块402,用于根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数。
构建模块403,用于根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林。
展示模块404,用于检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林。
进一步地,构建模块403可以包括:
判断单元,用于判断栈底函数是否存在函数森林中。
树构建单元,用于当栈底函数存在函数森林中时,以函数森林中的栈底函数为树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
新树构建单元,用于当栈底函数不存在函数森林中时,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
进一步地,新树构建单元可以包括:
合并检测单元,用于对函数森林中的每一个函数树的每一个节点进行检测。
合并单元,用于在检测到同一个函数树的同一栈层级中存在相同的调用函数时,将表示同一个调用函数的节点合并为一个节点。
权值赋予单元,用于对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置。
进一步地,权值赋予单元可以包括:
单一检测单元,用于检测函数树中的连续单一节点组。
收缩单元,用于在检测到函数树中存在连续单一节点组时,将所述连续单一节点组收缩为一个复合节点。
进一步地,收缩单元可以包括:
提取单元,用于以一个函数树中所有节点的父函数作为一个父函数池,提取所述父函数池中仅出现一次的父函数以作为连续基准函数。
连续单一单元,用于将存在互为父子函数关系的连续基准函数分为一组,并统计每组中调用函数的个数,当所述个数大于连续阈值时,将该组调用函数作为连续单一节点组。
进一步地,权值赋予单元可以包括:
计算单元,用于计算两个函数向量之间的相似值。
权值差值计算单元,用于当所述相似值大于相似阈值时,计算两个函数的权值差值。
权值转移单元,用于当所述权值差值大于追溯阈值时,将权值较大的调用函数对应的权值的一部分转移至权值较小的调用函数对应的权值。
进一步地,展示模块404可以包括:
帧数卡顿系数设置单元,用于获取界面的帧数,根据所述帧数设置帧数卡顿系数。
处理器卡顿系数设置单元,用于获取中央处理器的占用率,根据所述占用率设置处理器卡顿系数。
执行卡顿系数设置单元,用于获取界面线程的执行时间,根据所述执行时间设置执行卡顿系数。
卡顿系数计算单元,用于根据所述帧数卡顿系数、所述处理器卡顿系数和所述执行卡顿系数计算卡顿系数。
卡顿判定单元,用于当所述卡顿系数大于所述卡顿阈值时,即判定界面的运行存在卡顿情况。
具体地,对于界面线程的可视化装置的具体限定与上述界面线程的可视化方法的具体限定一致,在此不再一一赘述。
在本实施例中,能够获取界面线程的堆栈中的调用函数,再根据每个调用函数在堆栈中的位置确定每个调用函数的栈层级和父函数,最终根据每个调用函数的栈层级和父函数构建函数树以形成函数森林,并在界面运行卡顿的时候在交互界面展示函数森林,从而实现了界面线程的可视化,解决了现有技术中判断界面线程异常情况时存在的效率低、容易误判的问题。
为解决上述技术问题,本申请实施例还提供计算机设备。具体请参阅图13,图13为本实施例计算机设备基本结构框图。
所述计算机设备13包括通过系统总线相互通信连接存储器131、处理器132、网络接口133。需要指出的是,图中仅示出了具有组件131-133的计算机设备13,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。其中,本技术领域技术人员可以理解,这里的计算机设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,其硬件包括但不限于微处理器、专用集成电路(Application Specific Integrated Circuit,ASIC)、可编程门阵列(Field-Programmable Gate Array,FPGA)、数字处理器(Digital Signal Processor,DSP)、嵌入式设备等。
所述计算机设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述计算机设备可以与用户通过键盘、鼠标、遥控器、触摸板或声控设备等方式进行人机交互。
所述存储器131至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,所述存储器131可以是所述计算机设备13的内部存储单元,例如该计算机设备13的硬盘或内存。在另一些实施例中,所述存储器131也可以是所述计算机设备13的外部存储设备,例如该计算机设备13上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,所述存储器131还可以既包括所述计算机设备13的内部存储单元也包括其外部存储设备。本实施例中,所述存储器131通常用于存储安装于所述计算机设备13的操作系统和各类应用软件,例如界面线程的可视化方法的程序代码等。此外,所述存储器131还可以用于暂时地存储已经输出或者将要输出的各类数据。
所述处理器132在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器132通常用于控制所述计算机设备13的总体操作。本实施例中,所述处理器132用于运行所述存储器131中存储的程序代码或者处理数据,例如运行所述界面线程的可视化方法的程序代码。
所述网络接口133可包括无线网络接口或有线网络接口,该网络接口133通常用于在所述计算机设备13与其他电子设备之间建立通信连接。
本申请还提供了另一种实施方式,即提供一种计算机可读存储介质,所述计算机可读存储介质存储有界面线程的可视化程序,所述界面线程的可视化程序可被至少一个处理器执行,以使所述至少一个处理器执行如上述的界面线程的可视化方法的步骤。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本申请各个实施例所述的方法。
显然,以上所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例,附图中给出了本申请的较佳实施例,但并不限制本申请的专利范围。本申请可以以许多不同的形式来实现,相反地,提供这些实施例的目的是使对本申请的公开内容的理解更加透彻全面。尽管参照前述实施例对本申请进行了详细的说明,对于本领域的技术人员来而言,其依然可以对前述各具体实施方式所记载的技术方案进行修改,或者对其中部分技术特征进行等效替换。凡是利用本申请说明书及附图内容所做的等效结构,直接或间接运用在其他相关的技术领域,均同理在本申请专利保护范围之内。

Claims (8)

1.一种界面线程的可视化方法,其特征在于,包括下述步骤:
获取界面线程的堆栈中的调用函数;
根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数;
根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林;
检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林;
所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林包括:
对函数森林中的每一个函数树的每一个节点进行检测;
在检测到同一个函数树的同一栈层级中存在相同的调用函数时,将表示同一个调用函数的节点合并为一个节点;
对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置;
所述对函数树中的每一个节点赋予一个权值,其中合并后节点的权值根据所合并的节点的个数设置之后还包括:
计算两个函数向量之间的相似值;
当所述相似值大于相似阈值时,计算两个调用函数的权值差值;
当所述权值差值大于追溯阈值时,将权值较大的调用函数对应的权值的一部分转移至权值较小的调用函数对应的权值。
2.根据权利要求1所述的可视化方法,其特征在于,所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林还包括:
判断栈底函数是否存在函数森林中;
若存在,则以函数森林中的栈底函数为树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树;
若不存在,则在函数森林中将栈底函数新建为一个树的顶点,以存在父函数的调用函数为树的节点,并根据调用函数的栈层级和父函数确定顶点和各个节点的位置以及连接关系以形成函数树。
3.根据权利要求1所述的可视化方法,其特征在于,所述根据栈底函数和每个调用函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林还包括:
检测函数树中的连续单一节点组;
在检测到函数树中存在连续单一节点组时,将所述连续单一节点组收缩为一个复合节点。
4.根据权利要求3所述的可视化方法,其特征在于,所述检测树中的连续单一节点组包括:
以一个函数树中所有节点的父函数作为一个父函数池,提取所述父函数池中仅出现一次的父函数以作为连续基准函数;
将存在互为父子函数关系的连续基准函数分为一组,并统计每组中函数的个数,当所述个数大于连续阈值时,将该组函数作为连续单一节点组。
5.根据权利要求1至4任意一项所述的可视化方法,其特征在于,所述检测界面的运行是否存在卡顿情况包括:
获取界面的帧数,根据所述帧数设置帧数卡顿系数;
获取中央处理器的占用率,根据所述占用率设置处理器卡顿系数;
获取界面线程的执行时间,根据所述执行时间设置执行卡顿系数;
根据所述帧数卡顿系数、所述处理器卡顿系数和所述执行卡顿系数计算卡顿系数;
当所述卡顿系数大于卡顿阈值时,即判定界面的运行存在卡顿情况。
6.一种界面线程的可视化装置,其特征在于,所述可视化装置运行时实现如权利要求1至5中任一项所述的可视化方法,所述可视化装置包括:
获取模块,用于获取界面线程的堆栈中的调用函数;
确定模块,用于根据每个调用函数在堆栈中的位置确定界面线程的栈底函数和每个调用函数的栈层级、父函数;
构建模块,用于根据栈底函数和每个函数的栈层级、父函数构建所述调用函数的函数树以形成函数森林;
展示模块,用于检测界面的运行是否存在卡顿情况,当存在卡顿情况时,在交互界面展示所述函数森林。
7.一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的可视化方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至5中任一项所述的可视化方法的步骤。
CN202010038478.9A 2020-01-14 2020-01-14 界面线程可视化方法、装置、计算机设备及存储介质 Active CN111273980B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010038478.9A CN111273980B (zh) 2020-01-14 2020-01-14 界面线程可视化方法、装置、计算机设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010038478.9A CN111273980B (zh) 2020-01-14 2020-01-14 界面线程可视化方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN111273980A CN111273980A (zh) 2020-06-12
CN111273980B true CN111273980B (zh) 2024-03-29

Family

ID=70997100

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010038478.9A Active CN111273980B (zh) 2020-01-14 2020-01-14 界面线程可视化方法、装置、计算机设备及存储介质

Country Status (1)

Country Link
CN (1) CN111273980B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111913696A (zh) * 2020-08-07 2020-11-10 平安科技(深圳)有限公司 基于GDB的OpenCV程序可视化方法、装置、设备及存储介质
CN112559231B (zh) * 2020-12-15 2023-10-03 北京百度网讯科技有限公司 应用检测方法、装置、设备以及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107015904A (zh) * 2016-01-28 2017-08-04 中兴通讯股份有限公司 堆栈的保护方法及装置
CN109522209A (zh) * 2018-09-29 2019-03-26 中国平安人寿保险股份有限公司 日志堆栈信息分析方法及装置、计算机装置及存储介质
CN109840177A (zh) * 2017-11-24 2019-06-04 腾讯科技(深圳)有限公司 一种卡顿的处理方法及相关设备

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107015904A (zh) * 2016-01-28 2017-08-04 中兴通讯股份有限公司 堆栈的保护方法及装置
CN109840177A (zh) * 2017-11-24 2019-06-04 腾讯科技(深圳)有限公司 一种卡顿的处理方法及相关设备
CN109522209A (zh) * 2018-09-29 2019-03-26 中国平安人寿保险股份有限公司 日志堆栈信息分析方法及装置、计算机装置及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于云渲染的三维BIM模型可视化技术研究;刘北胜;《北京交通大学学报》(第06期);第112-118页 *

Also Published As

Publication number Publication date
CN111273980A (zh) 2020-06-12

Similar Documents

Publication Publication Date Title
CN109408105A (zh) 用户行为数据的采集方法、装置、计算装置和存储介质
CN111273980B (zh) 界面线程可视化方法、装置、计算机设备及存储介质
CN111552633A (zh) 接口的异常调用测试方法、装置、计算机设备及存储介质
CN112468658A (zh) 语音质量检测方法、装置、计算机设备及存储介质
CN112328657A (zh) 特征衍生方法、装置、计算机设备及介质
CN108197002A (zh) 移动设备无埋点数据统计方法、系统、终端及介质
CN109240664A (zh) 一种采集用户行为信息的方法及终端
CN112130944A (zh) 页面异常的检测方法、装置、设备及存储介质
CN117033249A (zh) 一种测试用例生成方法、装置、计算机设备及存储介质
CN111415683A (zh) 语音识别异常告警方法、装置、计算机设备和存储介质
CN110618797A (zh) 生成文字走马灯的方法、装置及终端设备
CN114625372A (zh) 组件自动编译方法、装置、计算机设备及存储介质
CN113961835A (zh) 数据处理方法、装置、电子设备及存储介质
CN113805861A (zh) 基于机器学习的代码生成方法、代码编辑系统及存储介质
CN113254338A (zh) 测试用例生成方法、装置及设备
CN112800741A (zh) 任务执行方法、电子设备及存储介质
CN113076728A (zh) 一种对话框的数据填写方法以及相关设备
CN113656044B (zh) 安卓安装包压缩方法、装置、计算机设备及存储介质
CN110851346A (zh) 查询语句边界问题的检测方法、装置、设备及存储介质
CN110427935B (zh) 一种网页元素识别的方法及服务器
CN110569459A (zh) 一种网页信息的统计方法和装置
CN113934952B (zh) 以积木式方式搭建页面的方法及装置
CN114237915B (zh) 分布式环境下基于机器学习的数据修复方法、装置及设备
CN113364773B (zh) 安全性识别方法、装置和电子设备
CN117785181A (zh) 一种代码执行方法、装置、设备及其存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant