Chromium最近的代码库中, 增加了一个新模块<GPU>. 随便浏览了一下这个目录, 被 cmd_buffer_common.h和cmd_buffer_common.cc中的一个实用的小trick给吸引住了, 其功能就是定义一组枚举值, 同时提供了函数接口可以根据给定的枚举值获得相应的字符串名. 代码原理非常简单, 请参考以下详细代码片段:
cmd_buffer_common.h 部分:
// This macro is used to safely and convienently expand the list of commnad
// buffer commands in to various lists and never have them get out of sync. To
// add a new command, add it this list, create the corresponding structure below
// and then add a function in gapi_decoder.cc called Handle_COMMAND_NAME where
// COMMAND_NAME is the name of your command structure.
//
// NOTE: THE ORDER OF THESE MUST NOT CHANGE (their id is derived by order)
#define COMMON_COMMAND_BUFFER_CMDS(OP) \
OP(Noop) /* 0 */ \
OP(SetToken) /* 1 */ \
OP(Jump) /* 2 */ \
OP(JumpRelative) /* 3 */ \
OP(Call) /* 4 */ \
OP(CallRelative) /* 5 */ \
OP(Return) /* 6 */ \
OP(SetBucketSize) /* 7 */ \
OP(SetBucketData) /* 8 */ \
OP(SetBucketDataImmediate) /* 9 */ \
OP(GetBucketSize) /* 10 */ \
OP(GetBucketData) /* 11 */ \
// Common commands.
enum CommandId {
#define COMMON_COMMAND_BUFFER_CMD_OP(name) k ## name,
COMMON_COMMAND_BUFFER_CMDS(COMMON_COMMAND_BUFFER_CMD_OP)
#undef COMMON_COMMAND_BUFFER_CMD_OP
kNumCommands,
kLastCommonId = 255, // reserve 256 spaces for common commands.
};
cmd_buffer_common.cc 部分:
const char* GetCommandName(CommandId command_id) {
static const char* const names[] = {
#define COMMON_COMMAND_BUFFER_CMD_OP(name) # name,
COMMON_COMMAND_BUFFER_CMDS(COMMON_COMMAND_BUFFER_CMD_OP)
#undef COMMON_COMMAND_BUFFER_CMD_OP
};
int id = static_cast<int>(command_id);
return (id >= 0 && id < kNumCommands) ? names[id] : "*unknown-command*";
}
这种方法的后期维护代价是非常低的, 以后碰到需要用到这种功能的地方, 不妨尝试一下.
分享到:
相关推荐
断断续续下载chromium代码花了1周左右,代码约15G左右,其中遇到power shell的问题,遇到python的问题。最终编译花了11:30分。相比于Linux下的编译慢很多,系统运行的稳定性和速度也差很多。打算研究源码,一起分享...
#### 第1篇 Web开发须知的浏览器内幕:缓存与存储篇(2) **3. HTTP Cache综述** - **HTTP Cache概念**: - HTTP缓存机制遵循IETF规范设计,最新的标准文档为[RFC 7234](https://tools.ietf.org/html/rfc7234),...
- 通过`git add`、`git commit`和`git push`来提交和分享自己的代码修改。 - 利用`git rebase`和`git cherry-pick`等高级功能进行代码整理和修复。 此外,`depot_tools`还提供了其他辅助工具,例如`gclient`,这是...
**CEF(Chromium Embedded Framework)** 是一个开源框架,它允许开发者将谷歌的 **Chromium** 浏览器引擎嵌入到他们的应用程序中。这个框架使得开发者可以利用Chromium的先进特性,如高效的网页渲染、JavaScript支持...
cef 版本5414chromium 版本109.0.5414.8完整源码,已经把hook同步完成 ,并且为了缩小体积把.git文件清除了,使用百度云分享直接同步的代码,release编译不过,做了很多修改才编译通过在多台机器上测试通过,可以...
### 1. **Chromium 内核** Chromium 是 Google Chrome 浏览器背后的开源项目,以其高性能和丰富的 Web API 支持而闻名。DCEF3 将 Chromium 的这些优点带入了 Delphi 开发环境,使得开发者可以轻松地在 Delphi 应用...
1. Android WebView 的渲染流程技术:文档主要探讨了利用 Chromium 引擎渲染网页的技术细节。在 Android 平台上,Webview 组件允许应用程序展示网页内容,而 Chromium 渲染管道技术分享则重点说明了其背后的工作原理...
在自定义主题中显示铬代码...分享https://chrome.google.com/webstore/detail/chromium-codesearch-theme/mfknemlbeilclnbkfelgpldgnbnekeol Github:https://github.com/chaopeng/codesearch-theme 支持语言:English
这个"CEF1"是CEF的一个特定版本,主要用于构建基于Chromium的桌面应用。在这里,我们主要讨论CEF的基本概念、CEF1的构建过程以及如何下载和使用CEF1。 **CEF的基本概念:** CEF是一个轻量级的框架,它为开发人员...
12. **协作与分享**:VSCode的Live Share功能允许用户实时共享代码编辑会话,与他人协同工作。 VSCodeUserSetup-x64-1.50.1.exe是这个版本的安装程序,双击运行后,会引导用户完成VSCode的安装过程。安装过程中,...
1。 CBA提供了能够从扩展端口界面设置逐步代码注入。 2.在导航网页时记录用户交互(填充表单,单击按钮,超链接和DOM元素路径计算的智能算法)。 3.在浏览器本地存储中保存项目。 4.逐步注入。 5.使用合作者导入,...
【描述】描述中提到的"执照"意味着这个主题遵循特定的开源许可协议,这通常是鼓励分享、修改和再分发代码的方式。然而,具体的许可协议没有在描述中给出,通常这些协议可能包括Apache License、MIT License或GPL等。...
对于隐私和安全方面,Chromium_screenshot_extension可能遵循浏览器的沙盒机制,确保扩展的操作限制在特定的权限范围内,防止恶意代码对用户数据造成威胁。同时,如果扩展需要访问用户的浏览历史或其他敏感信息,会...
Chrome的源代码可以在Chromium项目中找到,这是一个用C++编写的项目,采用了多进程架构,旨在提高稳定性和安全性。源代码的开放性使得开发者可以了解和优化浏览器性能,创建自定义版本,或者为Chrome开发插件和扩展...
Qt 是一种用 C++ 编写的库,可以构建原生的桌面应用程序,而 Electron 则是基于 Node.js 和 Chromium 的框架,用于创建桌面应用,特别适合 Web 技术开发者。通过这些框架,开发者可以使用相同的代码库在不同操作系统...
- VS Code采用了Electron框架,结合了Chromium和Node.js,提供高性能的代码渲染和轻量级的内存占用。 7. **开发环境配置**: - 用户可以根据项目需求自定义工作区设置,比如代码格式化规则、快捷键映射、集成终端...
Puppeteer则是由Google Chrome团队开发的Node.js库,它可以控制Chromium或Chrome浏览器,进行自动化测试、网页截图等操作。使用Puppeteer实现截屏: 1. 首先,你需要安装Puppeteer库。 ```bash npm install ...
如果您在与我分享电子邮件地址时遇到问题(顺便说一句,我的电话是 ),我您自己克隆/副本并更改您对代码和/或使用的内容替代解决方案(没有一个比NiM更好,但称我有偏见)。 可以随时直接与我联系并进行聊天。 与...
1. **PDF库的集成与使用**:PDF阅读器的核心是能够解析和渲染PDF文件。Android系统本身并不直接支持PDF的处理,所以通常会借助第三方库,如`PDFium`(由Google开源)或`Apache PDFBox`。PDFium是Android平台常用的...
1. **浏览器扩展**:浏览器扩展是一种小型软件应用,可安装在Google Chrome、Chromium或Firefox等现代浏览器上,以增强或修改其功能。这种扩展可以提供各种服务,例如网页增强、广告拦截、隐私保护等。 2. **Google...