CN113791789A - 一种通用浏览器上检测webgl上下文的方法 - Google Patents
一种通用浏览器上检测webgl上下文的方法 Download PDFInfo
- Publication number
- CN113791789A CN113791789A CN202110930270.2A CN202110930270A CN113791789A CN 113791789 A CN113791789 A CN 113791789A CN 202110930270 A CN202110930270 A CN 202110930270A CN 113791789 A CN113791789 A CN 113791789A
- Authority
- CN
- China
- Prior art keywords
- webgl
- function
- context
- virtual
- instruction
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/20—Software design
- G06F8/24—Object-oriented
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种通用浏览器上检测webgl上下文的方法,包括以下步骤:S1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;S2:利用钩子函数,对webgl标准的源函数进行处理;S3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。本发明提供一种不需要开发者修改自己代码就可以方便检测一帧渲染所调用的所有上下文的指令(包括每种指令调用次数)、当前上下文状态、webgl扩展支持情况、webgl显存使用数量(buffers和texture)、渲染片元数,从而方便排查故障并有目的性的优化项目。
Description
技术领域
本发明属于webgl检测技术领域,具体涉及一种通用浏览器上检测webgl上下文的方法。
背景技术
目前市面上基于webgl的h5应用的开发越来越普及,但web端开发者们会发现因为webgl是一种基于状态机的上下文,当项目规模庞大,渲染的物体变多时,开发者们不知道状态机里到底做过什么事情,现在的上下文状态,是否指令间存在过度使用而浪费图像处理器的情况。所以很难排查并优化这种基于webgl的项目。
发明内容
本发明的目的是为了解决webgl上下文难排查的问题,提出了一种通用浏览器上检测webgl上下文的方法。
本发明的技术方案是:一种通用浏览器上检测webgl上下文的方法包括以下步骤:
S1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;
S2:利用钩子函数,对webgl标准的源函数进行处理;
S3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。
进一步地,步骤S1中,webgl标准包括webgl虚拟指令基类和webgl虚拟对象基类;
虚拟上下文用于模拟浏览器上状态机的内部环境;
钩子函数用于调用webgl标准的源函数时,触发调用自定义函数。
进一步地,步骤S2包括以下子步骤:
S21:保存webgl标准中的源函数,并触发钩子函数,将webgl虚拟指令基类和webgl虚拟对象基类分别映射至虚拟上下文中的webgl指令和webgl对象;
S22:重写源函数,并对将源函数中的参数进行保存并处理。
进一步地,步骤S22中,对源函数中的参数进行处理的方法具体为:通过webgl指令记录由钩子函数产生的命令调用堆栈、调用时间戳、调用参数列表和参数列表的序列化接口;
调用钩子函数中的虚拟指令,将虚拟指令对应的原指令内的参数列表推入webgl虚拟对象基类的参数列表,并记录当前调用时间戳和编程语言的函数调用堆栈;创建虚拟指令对象,调用保存的源函数,将源函数产生的webgl对象的句柄号和上下文标签记录在webgl虚拟对象基类中。
进一步地,步骤S3中,进行webgl上下文检测的具体方法为:激活虚拟上下文中webgl指令和webgl对象的记录功能,使源函数的函数调用进入钩子函数的函数逻辑内,并对虚拟上下文和状态机做一份镜像文件,停止记录功能,根据记录结果进行webgl上下文检测。
本发明的有益效果是:本发明提供一种不需要开发者修改自己代码就可以方便检测一帧渲染所调用的所有上下文的指令(包括每种指令调用次数)、当前上下文状态、webgl扩展支持情况、webgl显存使用数量(buffers和texture)、渲染片元数,从而方便排查故障并有目的性的优化项目。
附图说明
图1为检测webgl上下文方法的流程图。
具体实施方式
下面结合附图对本发明的实施例作进一步的说明。
webgl上下文:编写一个WebGL的应用程序,第一步是让WebGL渲染上下文,即Context对象。这个对象与WebGL绘制缓冲区进行交互,可以调用所有WebGL的方法。
虚拟上下文:Webgl标准内名为webgl context的东西就是虚拟上下文,其建立在驱动接口上的状态机,用于完全模拟状态机内部状态的环境,且虚拟状态环境是不能直接和硬件关联的,只是为了方便查看真实上下文中的状态,相当于一个镜像。
webgl标准:webgl标准描述一个附加的渲染上下文和支持对象,用于HTML5canvas元素。该上下文允许使用符合OpenGL ES 2.0API的一套API进行渲染。WebGL技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂3D结构的网站页面,甚至可以用来设计3D网页游戏等等。
函数调用:计算机编译或运行时,使用某个函数来完成相关命令。对无参函数调用时则无实际参数表。实际参数表中的参数可以是常数、变量或其它构造类型数据及表达式。各实参之间用逗号分隔。
webgl:一种3D绘图协议,这种绘图技术标准允许把JavaScript和OpenGL ES2.0结合在一起,通过增加OpenGL ES 2.0的一个JavaScript绑定,WebGL可以为HTML5 Canvas提供硬件3D加速渲染,这样Web开发人员就可以借助系统显卡来在浏览器里更流畅地展示3D场景和模型了,还能创建复杂的导航和数据视觉化。
h5:构建Web内容的一种语言描述方式。
如图1所示,本发明提供了一种通用浏览器上检测webgl上下文的方法,包括以下步骤:
S1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;
S2:利用钩子函数,对webgl标准的源函数进行处理;
S3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。
在本发明实施例中,步骤S1中,webgl标准包括webgl虚拟指令基类和webgl虚拟对象基类;
虚拟上下文用于模拟浏览器上状态机的内部环境;
钩子函数用于调用webgl标准的源函数时,触发调用自定义函数。
在本发明实施例中,步骤S2包括以下子步骤:
S21:保存webgl标准中的源函数,并触发钩子函数,将webgl虚拟指令基类和webgl虚拟对象基类分别映射至虚拟上下文中的webgl指令和webgl对象;
S22:重写源函数,并对将源函数中的参数进行保存并处理。
在本发明实施例中,步骤S22中,对源函数中的参数进行处理的方法具体为:通过webgl指令记录由钩子函数产生的命令调用堆栈、调用时间戳、调用参数列表和参数列表的序列化接口;
调用钩子函数中的虚拟指令,将虚拟指令对应的原指令内的参数列表推入webgl虚拟对象基类的参数列表,并记录当前调用时间戳和编程语言的函数调用堆栈;创建虚拟指令对象,调用保存的源函数,将源函数产生的webgl对象的句柄号和上下文标签记录在webgl虚拟对象基类中。
在本发明实施例中,步骤S3中,进行webgl上下文检测的具体方法为:激活虚拟上下文中webgl指令和webgl对象的记录功能,使源函数的函数调用进入钩子函数的函数逻辑内,并对虚拟上下文和状态机做一份镜像文件,停止记录功能,根据记录结果进行webgl上下文检测。
在本发明实施例中,具体可为以下步骤:
1:因为检测方法要通用,所以需要做一个工具sdk(软件开发工具包),此工具可以在任何有webgl渲染功能的应用使用;
2:sdk在初始化时内存内创建一个符合webgl标准的虚拟上下文,包括但不限于texture uint、texture、program、buffer、sampler、blendfunc、clearcolor、clearcolormask attribute、framebuffer、renderbuffer、depthbuffer和shader等;其中,Webgl标准内有一个名为webgl context的东西就是上下文,这个是建立在驱动接口上的状态机,这里建立的虚拟上下文用于完全模拟状态机内部状态的环境,只是这个虚拟状态环境是不能直接和硬件关联的,只是为了方便查看真实上下文中的状态,相当于一个镜像。
3:由于webgl现在是h5上的一个标准,之后对浏览器上的所有webgl接口进行代理hook,其中,钩子函数是为了在源函数调用时,额外触发调用的自定义函数,这样就可以在这个自定义函数(也就是钩子函数)中写额外的逻辑功能;
4:把每个webgl标准接口函数保存一个原始版本函数;
5:重写这个标准函数,对每个函数传进来的参数进行保存并处理相关逻辑,此处可以针对每个函数罗列出具体逻辑,使得虚拟上下文和真实webgl上下文一致;最后调用之前保存好的原始函数版本来让浏览器通信到gpu(图形处理器)进行正常工作。
其中,每个函数的参数列表不一样,但种类为GLuint(webgl内的整形)GLenum(webgl内枚举)webglTexture等;
处理相关逻辑具体为:根据标准中源函数的返回值和参数类型和参数长度,虚拟函数需要把对应的参数压入参数列表来保存,所以每个虚拟函数都不同,但是流程是完全一致的。
针对webgl标准,创建了2个大类,一种是虚拟baseCommand基类,另一种是虚拟webglObject基类,分别用来映射到webglcommand和webglObecjt(Webgl指令和webgl对象)上。虚拟basecommand中记录了命令调用堆栈,调用时间戳,调用参数列表,和序列化参数列表的接口;因为调用了源webglcommand函数,所以会触发钩子函数也就是对应的虚拟webglcommand函数,这个函数是继承与虚拟basecommand的,像记录时间戳,记录调用堆栈和序列化参数的逻辑是在baseCammand中实现的,这些功能可以通过JavaScript内置函数来实现,记录参数列表在具体的虚拟webglcommand中实现。虚拟webglObject基类中实现了对象类型标签和源对象的句柄号。举例说明:比如webgl标准中的createTexture指令,虚拟createTexture command是继承与虚拟baseCommand的。当原始指令被调用时会先去调用钩子函数虚拟的createTexture指令,将原指令内的参数列表推入基类中的参数列表,并记录当前调用时间戳和javascript的函数调用堆栈。然后创建一个虚拟webglTexture对象,之后调用之前保存好的原始函数,将原始函数产生的webglObject的句柄号和texture标签记录在虚拟webglObject(此例中为虚拟webglTexture)中。其中在初始化上下文的接口中实现对当前浏览器的扩展支持度和纹理压缩支持进行检测并保存。
6:带检测应用在运行前先进行此sdk初始化工作,当程序运行起来需要做一帧渲染的虚拟webgl上下文和状态机的快照时,激活webgl虚拟上下文的记录功能,这样所有正常的函数调用都会进入到之前做的hook的函数逻辑内,这样就可以对真正的webgl上下文和状态机做一份完全一样的虚拟webgl上下文和状态机的镜像,当这帧渲染结束后停止记录功能,然后对当前虚拟快照进行一个页面展示。
本发明的工作原理及过程为:本发明对每个原始函数做一个代理函数,并创建一个符合标准的虚拟webgl上下文和状态机,再对每个标准函数所做的特殊逻辑。
本发明的有益效果为:本发明提供一种不需要开发者修改自己代码就可以方便检测一帧渲染所调用的所有上下文的指令(包括每种指令调用次数)、当前上下文状态、webgl扩展支持情况、webgl显存使用数量(buffers和texture)、渲染片元数,从而方便排查故障并有目的性的优化项目。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。
Claims (5)
1.一种通用浏览器上检测webgl上下文的方法,其特征在于,包括以下步骤:
S1:创建符合webgl标准的虚拟上下文,并对所有webgl接口创建钩子函数;
S2:利用钩子函数,对webgl标准的源函数进行处理;
S3:激活虚拟上下文,并根据源函数的处理结果进行webgl上下文检测。
2.根据权利要求1所述的通用浏览器上检测webgl上下文的方法,其特征在于,所述步骤S1中,webgl标准包括webgl虚拟指令基类和webgl虚拟对象基类;
所述虚拟上下文用于模拟浏览器上状态机的内部环境;
所述钩子函数用于调用webgl标准的源函数时,触发调用自定义函数。
3.根据权利要求2所述的通用浏览器上检测webgl上下文的方法,其特征在于,所述步骤S2包括以下子步骤:
S21:保存webgl标准中的源函数,并触发钩子函数,将webgl虚拟指令基类和webgl虚拟对象基类分别映射至虚拟上下文中的webgl指令和webgl对象;
S22:重写源函数,并对将源函数中的参数进行保存并处理。
4.根据权利要求3所述的通用浏览器上检测webgl上下文的方法,其特征在于,所述步骤S22中,对源函数中的参数进行处理的方法具体为:通过webgl指令记录由钩子函数产生的命令调用堆栈、调用时间戳、调用参数列表和参数列表的序列化接口;
调用钩子函数中的虚拟指令,将虚拟指令对应的原指令内的参数列表推入webgl虚拟对象基类的参数列表,并记录当前调用时间戳和编程语言的函数调用堆栈;创建虚拟指令对象,调用保存的源函数,将源函数产生的webgl对象的句柄号和上下文标签记录在webgl虚拟对象基类中。
5.根据权利要求2所述的通用浏览器上检测webgl上下文的方法,其特征在于,所述步骤S3中,进行webgl上下文检测的具体方法为:激活虚拟上下文中webgl指令和webgl对象的记录功能,使源函数的函数调用进入钩子函数的函数逻辑内,并对虚拟上下文和状态机做一份镜像文件,停止记录功能,根据记录结果进行webgl上下文检测。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110930270.2A CN113791789B (zh) | 2021-08-13 | 2021-08-13 | 一种通用浏览器上检测webgl上下文的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110930270.2A CN113791789B (zh) | 2021-08-13 | 2021-08-13 | 一种通用浏览器上检测webgl上下文的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113791789A true CN113791789A (zh) | 2021-12-14 |
CN113791789B CN113791789B (zh) | 2023-08-04 |
Family
ID=79181768
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110930270.2A Active CN113791789B (zh) | 2021-08-13 | 2021-08-13 | 一种通用浏览器上检测webgl上下文的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113791789B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6314445B1 (en) * | 1998-08-03 | 2001-11-06 | International Business Machines Coproration | Native function calling |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
US20070083813A1 (en) * | 2005-10-11 | 2007-04-12 | Knoa Software, Inc | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications |
CN102663318A (zh) * | 2012-03-22 | 2012-09-12 | 百度在线网络技术(北京)有限公司 | 浏览器及客户端 |
US20130198325A1 (en) * | 2012-01-26 | 2013-08-01 | Motorola Mobility Llc | Provision and running a download script |
US20180024911A1 (en) * | 2016-03-07 | 2018-01-25 | T Komp Tomasz Kruszewski | Software code debugger for quick detection of error root causes |
US20180113794A1 (en) * | 2015-06-10 | 2018-04-26 | Intel Corporation | Webgl application analyzer |
GB201809807D0 (en) * | 2018-06-15 | 2018-08-01 | Swiftclass Sa | Graphics rendering |
CN110413914A (zh) * | 2019-07-25 | 2019-11-05 | 中南民族大学 | 基于WebGL的渲染方法、装置、设备及存储介质 |
CN111880987A (zh) * | 2020-07-09 | 2020-11-03 | 青岛海尔科技有限公司 | 应用程序的动态监测方法、装置、存储介质以及电子装置 |
CN112540815A (zh) * | 2020-11-23 | 2021-03-23 | 深圳晶泰科技有限公司 | 多Web 3D场景离屏渲染方法 |
-
2021
- 2021-08-13 CN CN202110930270.2A patent/CN113791789B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6314445B1 (en) * | 1998-08-03 | 2001-11-06 | International Business Machines Coproration | Native function calling |
US20050198624A1 (en) * | 2004-03-02 | 2005-09-08 | Chipman Timothy W. | Method and system for program transformation |
US20070083813A1 (en) * | 2005-10-11 | 2007-04-12 | Knoa Software, Inc | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications |
US20130198325A1 (en) * | 2012-01-26 | 2013-08-01 | Motorola Mobility Llc | Provision and running a download script |
CN102663318A (zh) * | 2012-03-22 | 2012-09-12 | 百度在线网络技术(北京)有限公司 | 浏览器及客户端 |
US20180113794A1 (en) * | 2015-06-10 | 2018-04-26 | Intel Corporation | Webgl application analyzer |
US20180024911A1 (en) * | 2016-03-07 | 2018-01-25 | T Komp Tomasz Kruszewski | Software code debugger for quick detection of error root causes |
GB201809807D0 (en) * | 2018-06-15 | 2018-08-01 | Swiftclass Sa | Graphics rendering |
CN110413914A (zh) * | 2019-07-25 | 2019-11-05 | 中南民族大学 | 基于WebGL的渲染方法、装置、设备及存储介质 |
CN111880987A (zh) * | 2020-07-09 | 2020-11-03 | 青岛海尔科技有限公司 | 应用程序的动态监测方法、装置、存储介质以及电子装置 |
CN112540815A (zh) * | 2020-11-23 | 2021-03-23 | 深圳晶泰科技有限公司 | 多Web 3D场景离屏渲染方法 |
Non-Patent Citations (4)
Title |
---|
CARLA CRISTINA FLOREZ等: "Performance of WebGL standard for displaying 3D applications on mobile devices", 2021 16TH IBERIAN CONFERENCE ON INFORMATION SYSTEMS AND TECHNOLOGIES (CISTI), pages 1 - 6 * |
三石青韦: "WebGL基础介绍", pages 1 - 12, Retrieved from the Internet <URL:https://www.jianshu.com/p/75b1b4b701f7> * |
何博;王祖源;万昆;: "基于WebGL的三维物理模型设计与开发", 中国教育信息化, no. 06, pages 75 - 79 * |
巽秋: "Javascript高级编程学习笔记(97)—— WebGL(3) WebGL上下文(1)", pages 1 - 4, Retrieved from the Internet <URL:https://blog.csdn.net/qq_41904380/article/details/89506471> * |
Also Published As
Publication number | Publication date |
---|---|
CN113791789B (zh) | 2023-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11561887B2 (en) | Test script debugging using an automated testing framework and UI rendering tree | |
US11650910B2 (en) | Automated testing method and apparatus, storage medium and electronic device | |
JP5123323B2 (ja) | アプリケーションの変更前にコマンドの変更のパフォーマンスを解析するためのグラフィックコマンド管理ツールおよびその方法 | |
US7511712B1 (en) | Facilitating performance analysis for processing | |
JP5437485B2 (ja) | レンダリングされたグラフィックス要素のためのパフォーマンスメトリックの視覚的表現の表示 | |
US8347275B2 (en) | OpenGL to OpenGL/ES translator and OpenGL/ES simulator | |
US7533371B1 (en) | User interface for facilitating performance analysis for processing | |
US20120174079A1 (en) | Systems and methods for simulating a mobile device application | |
JPH10320235A (ja) | 呼び出し分析方法 | |
CN116185743B (zh) | OpenGL接口的双显卡对比调试方法、装置及介质 | |
CN113342703B (zh) | 一种渲染效果实时调试方法、装置、开发设备及存储介质 | |
CN112579254B (zh) | 图形处理器的仿真方法、装置、电子设备和存储介质 | |
CN115409687A (zh) | 一种基于显示缓冲区合成的渲染差异检测方法 | |
JP5421228B2 (ja) | 仮想タスクを使用した関係可視化のためのプログラム、装置およびその方法 | |
CN109634611B (zh) | 基于OpenGL的移动端三维模型ply文件解析与展示方法 | |
CN113393585B (zh) | 一种渲染问题定位方法、装置、定位设备及存储介质 | |
US9052924B2 (en) | Light-weight managed composite control hosting | |
CN113838180A (zh) | 一种渲染指令处理方法及其相关设备 | |
CN113791789B (zh) | 一种通用浏览器上检测webgl上下文的方法 | |
CN111857690A (zh) | 一种动画效果的调试方法、装置、计算机设备及存储介质 | |
CN112348962B (zh) | 模型构件点选方法、装置、计算机设备和存储介质 | |
CN110930499B (zh) | 一种3d数据处理方法及装置 | |
JP2010123060A (ja) | 未知のオブジェクトにアクセスする方法 | |
US10546416B2 (en) | Techniques for modifying graphics processing unit (GPU) operations for tracking in rendering images | |
CN117472336B (zh) | 基于程序api的代码生成装置及其方法、设备及介质 |
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 |