chromium中的log类

chromium中定义了一组强大的宏来帮助我们程序打log。 初始化log 调用logging::InitLogging去初始化log设施。我们需要给这个函数传递一个LoggingSettings类型的参数,如这样: 我们还可以进一步做一些高级设置: LOG宏 LOG就像c++标准库的输出一样重载<<,它有四个LOG等级,分别为”INFO”,... Read More | Share it now!

chromium中的有用工具类

AtExitManager 这个是类似CRT里面的atexit函数。当程序将要结束退出的时候,会调用注册到AtExitManager里面的回调任务。chromium用到AtExitManager的地方也不多,只有base::Singleton里用到了。 AtExitManager一般是在main或者WinMain里面定义一个局部对象,AtExitManager提供了2个静态的方法RegisterCallback,RegisterTask,代码中的任何地方可以调用这两个方法去注册程序退出时执行的任务。  AutoReset 自动把值设置成原始值。 CommandLine chromium中大量用到命令行,父子进程直接就通过命令行做一些约定。还可以运行时添加命令行参数开关。隐藏chromium提供了CommandLine这个类是用来创建或者解析命令行的。所有的命令行参数开关都有一个’–‘,’-‘或者’/’的前缀。开关可以通过=带有一个值比如”-switch=value”。   ... Read More | Share it now!

windows上面使用zlib

做软件开发,难免会用到压缩和解压的功能。我最开始用的是xzip这个库,就一个.h和.c文件,很小巧,接口也简单清晰,在codeproject上可以找到:http://www.codeproject.com/Articles/4135/XZip-and-XUnzip-Add-zip-and-or-unzip-to-your-app-w。但是这个库比较老了,2007后就没有更新了。 比较出名开源的压缩解压库是zlib,也一直在更新。很多著名的软件都采用这个库,比如linux内核,apache服务器,chrome浏览器等等。所以我们采用这个库肯定是没错的。下面一zlib... Read More | Share it now!

chromium中字符串有关的基础设施

大多数c++工程对字符串的操作都是比较频繁的。因为字符集,字符编码,还有c语言风格的字符串,这些东西掺合在一起容易导致使用字符串错误,比如字符乱码,缓冲区溢出等等问题。 windows平台对于字符串的处理有好几套api,掺杂着用,还能凑合着写代码,但是总是觉得不够优雅。幸好chromium... Read More | Share it now!

chromium的数据序列化类Value

chromium除了Pickle这个轻量级的数据序列化类,还有个重量级的Value数据序列化类。因为chromium中很多地方用到json格式的数据,比如Preferences配置文件,所以需要一个很方便写入和读取json格式的设施。Value正是对应着能存储在json中的数据。 Value 所有json格式数据的基类,有空值、布尔、整数、浮点、字符串、二进制、字典、列表这8种类型。 其中,空值、布尔、整数、浮点都是FundamentalValue,std::string和string16都是StringValue。Value提供了静态方法从c++数据类型创建FundamentalValue和StringValue。其他类型有对应的子类方法创建。 Value也提供了获取所有类型的数据接口GetAs*。还有深拷贝和判断两个Value是否相当。 FundamentalValue和StringValue这两个类很简单,就是从c++的bool,int,double生成FundamentalValue。std::string和string16生成StringValue。还有一些获取值,深拷贝和比较相等等接口。 BinaryValue跟FundamentalValue类似,但是注意的是它不能被序列化成json。 ListValue相当于动态数组,可以存放很多同一类型的数据,提供了数据的增删改查接口。 最后一个是最复杂的DictionaryValue类。 DictionaryValue设置key可以通过<key>,还可以通过<key>.<key>.<key>.多级key的方式指定。如果多级key中有些可能不存在,它会自动创建DictionaryValue去填充。 还有一种设置key-value的Set*WithoutPathExpansion接口是不扩展解释.,这样就可以创建带.的key。 获取的值的接口类似,有Get*和Get*WithoutPathExpansion两种。 DictionaryValue提供了其他增删改查的接口,设置还可以合并两个DictionaryValue。 ValueSerializer 我们可以序列化和反序列化Value到json中。ValueSerializer只是一个接口,如果需要与json格式互操作,我们可以使用JSONFileValueSerializer。   ... Read More | Share it now!

chromium的数据序列化类Pickle

有时候我们在不同模块接口之间传递一些基本类型数据,但又不想去定义结构体去装这些基本类型的数据,因为这样未免有些小题大做。 chromium中提供了一个Pickle的数据序列化类,你依次写入一些基本数据,然后用PickleIterator依次再读出这些数据就行了。chromium中的进程间通信机制IPC底层也大量用到Pickle,久经考验。 用法非常简单,但是你要保证写入跟读取数据的顺序是一致的。 ... Read More | Share it now!