在 Windows 下编译 Chromium

在 chrome 吧,如果有人对 Google Chrome 提出了什么“奇葩”的要求,那么广大吧友的意见就是“重新编译 Chromium”

由于 TYPCN 的邀请,我又捡起了这个编译的大坑

编译环境:Microsoft Windows 8.1
编译工具:Microsoft Visual Studio 2013 Ultimate with Update 2, Windows Driver Kit 7.1
之前的准备:
将 git(msysgit)、SVN、Python 2.7 添加到 %PATH%
(强烈建议)建立一个新的分区(40GiB 以上)专门用来放置 Chromium 源码(否则等编译完删除时那速度教你做人)

首先,下载 chromium 官方工具 depot_tools
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

下载完成后,将 depot_tools 目录也添加到 %PATH%

切换到新分区,运行
gclient.py config http://src.chromium.org/svn/trunk/src
指定 Chromium 源码地址

接下来,下载 Chromium 源码
set DEPOT_TOOLS_WIN_TOOLCHAIN=0防止 gclient 随手再下载一套 VS
set GYP_MSVS_VERSION=2013指定系统自带 VS 工具链
gclient.py sync --revision src@277079 --force
说明:277079 是 build 号,可改为其他 build 或者直接写 src 获取最新版本
强烈建议各位在此步使用 VPN 以提高代码获取速度(也可以用 Shadowsocks 配上 Proxifier 做个伪全局代理),开了 Shadowsocks 用了 5 个小时(~500KiB/s),没错

编译前的最后准备
set GYP_GENERATORS=msvs-ninja,ninja
set GYP_DEFINES=component=shared_library
gclient runhooks

开始编译
cd src
ninja -C out\Debug chrome
编译这步还是十分需要耐心的,不是去喝几杯咖啡什么的就能解决的问题,至少得吃两顿正饭(吃货)
AMD Athlon X2 240 + 6G RAM + HDD 花费了约 7 小时编译

查看编译结果
out\Debug\chrome.exe


初始化页面

关于页面

编译细节页面,这个页面花了将近一分钟才加载出
而且值得关注是,这个编译好的 Chromium 的 CPU 占用明显高于同版本的 Google Chrome

打开百度贴吧页面时极其高的 CPU 占用,以至于页面没有打开而直接崩溃

可能是由于我编译的是 Debug 版本,不过我也没有编译 Release 版的耐心了。
第一次编译 Debug 版本时因为开了 VS,编译了 70% 后 VS 内存占用涨到 2.3GB 后崩溃了。

C++ 学习记录(四)

//.cpp 
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string first_name, last_name;
	char grade;
	short age;
	cout << "你叫什么名字?";
	getline(cin,first_name);
	cout << "\n你的姓氏?";
	getline(cin,last_name);
	cout << "\n你的成绩?";
	cin >> grade;
	grade += 1;
	cout << "\n你的年龄?";
	(cin >> age).get();
	cout << "姓名:" << last_name << "·" << first_name << endl;
	cout << "成绩:" << grade << endl;
	cout << "年龄:" << age << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
using namespace std;
int main()
{
	char first_name[20], last_name[20];
	char grade;
	short age;
	cout << "你叫什么名字?";
	cin.getline(first_name,19);
	cout << "\n你的姓氏?";
	cin.getline(last_name,19);
	cout << "\n你的成绩?";
	cin >> grade;
	grade += 1;
	cout << "\n你的年龄?";
	(cin >> age).get();
	cout << "姓名:" << last_name << "·" << first_name << endl;
	cout << "成绩:" << grade << endl;
	cout << "年龄:" << age << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
using namespace std;
int main()
{
	char first_name[20], last_name[20], combined[42];
	cout << "你叫什么名字?";
	cin.getline(first_name,19);
	cout << "\n你的姓氏?";
	cin.getline(last_name,19);
	strcpy(combined,last_name);
	strcat(combined,"·");
	strcat(combined,first_name);
	cout << "使用单字符串显示的姓名:" << combined << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
#include <string>
using namespace std;
int main()
{
	string first_name, last_name;
	cout << "你叫什么名字?";
	getline(cin,first_name);
	cout << "\n你的姓氏?";
	getline(cin,last_name);
	last_name +=  "·";
	last_name +=  first_name;
	cout << "使用单字符串显示的姓名:" << last_name << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
#include <string>
using namespace std;
struct Candybar
{
	string brand;
	float weight;
	int calorie;
};
int main()
{
	Candybar snack = {"Mocha Munch", 2.3, 350};
	cout << "snack.brand = " << snack.brand << endl;
	cout << "snack.weight = " << snack.weight << endl;
	cout << "snack.caroine = " << snack.calorie << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
#include <string>
using namespace std;
struct pizza
{
	string company;
	float weight;
	float diameter;
};
int main()
{
	pizza pizza1;
	cout << "请输入披萨制作公司:" ;
	getline(cin,pizza1.company);
	cout << "\n请输入披萨直径:";
	(cin >> pizza1.diameter).get();
	cout << "\n请输入披萨重量:";
	(cin >> pizza1.weight).get();
	cout << "披萨公司:" << pizza1.company << endl;
	cout << "披萨直径:" << pizza1.diameter << endl;
	cout << "披萨重量:" << pizza1.weight << endl;
	cin.get();
	return 0;
}
//.cpp 
#include <iostream>
#include <string>
using namespace std;
struct pizza
{
	string company;
	float weight;
	float diameter;
};
int main()
{
	pizza * pizza1 = new pizza;
	cout << "请输入披萨制作公司:" ;
	getline(cin,pizza1->company);
	cout << "\n请输入披萨直径:";
	(cin >> pizza1->diameter).get();
	cout << "\n请输入披萨重量:";
	(cin >> pizza1->weight).get();
	cout << "披萨公司:" << pizza1->company << endl;
	cout << "披萨直径:" << pizza1->diameter << endl;
	cout << "披萨重量:" << pizza1->weight << endl;
	delete pizza1;
	cin.get();
	return 0;
}

C++ 学习记录(三)

1. 编写一个要求用户输入两个整数的程序。该程序将计算并输出这两个整数间(包括着两个整数)所有整数的和。这里假设先输入较小的整数。例如,如果用户输入的是 2 和 9,则程序将指出 2~9 之间所有整数的和为 44。

// sum_n.cpp 计算连续整数的和
#include <iostream>;
using namespace std;
int main ()
{
	cout <<"请输入较小的整数:";
	int smaller, bigger, i, sum;
	cin>>smaller;
	cout <<"请输入较大的整数:";
	cin>>bigger;
	sum = 0;
	for (i=smaller; i<bigger+1; i++)
	sum = sum + i;
	cout <<"从 "<<smaller<<" 到 "<<bigger <<" 的和为 " <<sum<<" 。";
	cin.get(); cin.get();
	return 0;
}

2.编写一个要求用户输入数字的程序。每次输入后,程序都将报告到目前为止,所有输入的累计和。当用户输入 0 时,程序结束。

//sum_all_input.cpp 统计所有输入的和
#include <iostream>;
using namespace std;
int main ()
{
	double input=0.1, sum=0;
	while (input!=0)
	{
		input = 0;
		cout <<"请输入数字:";
		cin >> input;
		sum = sum + input;
		cout << sum << endl;
	}
	cin.get(); 
	return 0;
}

3. Daphne 以 10% 的单利投资了 100 美元。也就是说,每一年的利润都是投资额的 10%,即每年 10 美元:
利息 = 0.10 × 原始存款
而 Cleo 以 5% 的复利投资了 100 美元。也就是说,利息是当前存款(包括获得的利息)的 5%:
利息 = 0.05 × 当前存款
Cleo 在第一年投资 100 美元的盈利是 5%——得到了 105 美元。下一年的盈利是 105 美元的 5%——即 5.25 美元,以此类推。请编写一个程序,计算多少年后,Cleo 的投资价值才能超过 Daphne 的投资价值,并显示此时两个人的投资价值。

//when_compound_interest_is_beyond_simple_interest.cpp 何时低复利能超过高单利
#include <iostream>;
using namespace std;
int main ()
{
	const int capital=100;
	int year=0;
	double compound = capital;
	double simple = capital;
	while (compound <= simple)
	{
		year += 1;
		compound += compound * 0.05;
		simple += capital * 0.1;
	};
	cout <<"在 "<< year <<" 年后,Cleo 的投资价值将高于 Daphne 的投资价值。\n";
	cout <<"此时,Cleo 的投资价值为 "<< compound <<" 美元,而 Daphne 的投资价值为 "<< simple <<" 美元。";
	cin.get(); cin.get(); 
	return 0;
}

4. 假设要销售《傻瓜C++》一书。请编写一个程序,输入全年中每个月的销售量(图书数量,而不是销售额)。程序通过循环,使用初始化为月份字符串的 char *数组(或 string 对象数组)逐月进行提示,并将输入的数据储存在一个 int 数组中。然后,程序计算数组中各元素的总数,并报告这一年的销售情况。

//sell_total.cpp 销量统计
#include <iostream>
#include <string>       //这个极其无语啊!!为啥我cstring不行?
using namespace std;
int main ()
{
	string month[12]=
	{
		"一月",
		"二月",
		"三月",
		"四月",
		"五月",
		"六月",
		"七月",
		"八月",
		"九月",
		"十月",
		"十一月",
		"十二月"
	};
	int sell[12];
	int i, sum=0;
	for (i=0; i<12 ; i++ )
	{
		cout << "请输入" 
		;	cout << month[i] << "的销售量:";
		cin >> sell[i];
		sum += sell[i];
	};
	cout << "本年共售出" << sum << "本书。";
	cin.get(); cin.get(); 
	return 0;
}

5. 完成编程练习 4,但这一次使用一个二维数组来存储输入——3 年中每个月的销售量。程序将报告每年销售量以及 3 年的总销售量。

//sell_total_2d_array.cpp 销量统计(使用二维数组)
#include <iostream>
#include <string>       //这个极其无语啊!!为啥我cstring不行?
using namespace std;
int main ()
{
	string month[12]=
	{
		"一月",
		"二月",
		"三月",
		"四月",
		"五月",
		"六月",
		"七月",
		"八月",
		"九月",
		"十月",
		"十一月",
		"十二月"
	};
	int sell[3][12];
	int i, j, ssum=0;
	int sum[3]={0,0,0};
	for (j=0; j<3 ;j++)
	{
		for (i=0; i<12 ; i++ ) //这个也好似当年的for /f嵌套
		{
			cout << "请输入第 " << j+1 << " 年" << month[i] << "的销售量:";
			cin >> sell[j][i];
			sum[j] += sell[j][i];
		};
		cout << "第"<<j+1<<"年共售出 " << sum[j] << " 本书。\n";
		ssum += sum[j];
	};
	cout << "三年共售出 " << ssum << " 本书。";
	cin.get(); cin.get(); 
	return 0;
}

6. 设计一个名为 car 的结构,用它存储下属有关信息:生产商(存储在字符数组或 string 对象中的字符串)、生产年份(整数)。编写一个程序,向用户询问有多少辆汽车。随后,程序使用 new 来创建一个由相应数量的 car 结构组成的动态数组。接下来,程序提示用户输入每辆车的生产商(可能由多个单词组成)和年份信息。请注意,这需要特别小心,因为它将交替读取数值和字符串(参见第 4 章)。最后,程序将显示每个结构的内容。该程序的运行状况如下:

你想登记几台车?2
车 #1
请输入生产商:Hudson Hornet
请输入制造年份:1952
车 #2
请输入生产商:Kaiser
请输入制造年份:1951
这里是你的收藏:
1952 Hudson Hornet
1951 Kaiser

C++ 学习记录(二)

今天的学习内容是C++ Premier Plus的第四章:复合类型
这章最引人注目的是:指针。它是我目前涉及的C++中最涉及计算机硬件核心的内容,这章很考验人的理解能力啊。。。

还是,做题。
1. 如何声明下述数据?
a. actor 是由 30 个 char 组成的数组。

char actor[30];

b. betsie 是由 100 个 short 组成的数组。

short betsie[100];

c. chuck 是由 13 个 float 组成的数组。

float chuck[13];

d. dipsea 是由 64 个 long double 组成的数组。

long double dipsea[64];

2. 声明一个包含 5 个元素的 int 数组,并将它初始化为前 5 个正奇数。

int element[5] = {1, 3, 5, 7, 9}; //从开始到这都多留空格了。。。

3. 编写一条语句,将问题 2 中数组的第一个元素和最后一个元素的和赋给变量 even。

int even = element[0] + element[4];

4. 编写一条语句,显示 float 数组 ideas 中的第 2 个元素的值 。

cout << "float 数组 ideas 中的第 2 个元素的值为 " << float[1] <<" 。";

5. 声明一个 char 的数组,并将其初始化为字符串“cheeseburger”。

char food[13] = "cheeseburger"; //字符单引号,字符串双引号,记住

6. 设计一个描述鱼的结构声明。结构中应当包括品种、重量(整数,单位为盎司)和长度(英寸,包括小数)。

struct fish  //差点用等号了。。。而且前几道题的“;”我华丽丽的全丢了啊,伤不起
{
	char kind[20];
	int weight;
	double length;
}

7. 声明一个问题 6 中定义的结构的变量,并对它进行初始化。

fish cyprinus_carpio = //这里用等号才对
{
	"Cyprinus carpio", //逗号分割,你懂得
	49,
	38.5
};

8. 用 enum 定义一个名为 Response 的类型,它包含 Yes,No 和 Maybe 等枚举量,其中 Yes 的值为 1,No 为 0,Maybe 为 2。

enum Response {No, Yes, Maybe}; //临时看的书,之前感觉一点没看这部分

9. 假设 ted 是一个 double 变量,请声明一个指向 ted 的指针,并使用该指针来显示 ted 的值

int p_ted = &ted;
cout << "变量 ted 的值为 " << *p_ted << " 。";

10. 假设 treacle 是一个包含 10 个元素的 float 数组,请声明一个指向 treacle 的第一个元素的指针,并使用该指针来显示数组的第一个元素和最后一个元素。

int p_treacle0 = &treacle[0]
cout << "第一个元素为 " << *p_treacle0 << ",最后一个元素为" << *(p_treacle0 + 9) << " 。"

11. 编写一段代码,要求用户输入一个正整数,然后创建一个动态的 int 数组,其中包含的元素数目等于用户输入的值。

//create_dynamic_array.cpp 创建动态数组
int main = 
{
	using namespace std; 
	unsigned int num;
	cout << "请输入正整数:"
	cin >> num;
	int column[num]
}

12. 下面的代码是否有效?如果有效,它将打印出什么结果?

cout << {int *} "Home of the joly bytes";

有效,打印出H所在内存位置

C++ 学习记录(一)

今天的学习内容是C++ Premier Plus的第三章:处理数据(可是我更愿意将其叫做变量= =)。首先我就感觉到了C++的变量与批处理是截然不同。。。在我学完这章后,我感觉批处理的变量就是普通的int/long变量(可能后者更贴切一些),从-2147483648到2147483647。计算功能也基本类似(+-*/%)。

但是。。。C++有浮点,这个好啊。不过也是有一定限制,而且计算时可能由于类型的转换而发生误差,这个也是内部缺陷。。。(Stroustrup:丫的,抽死你,劳资编C++不是让你耗内存玩的。)

好了,不废话了。现在开始做练习题。


1.编写一个小程序,要求用户使用一个整数指出自己的身高(单位为英寸),然后将身高转换为英尺和英寸。该程序使用下划线字符来指示输入位置。另外,使用一个const符号常量来表示转换因子。

= =妹的。。。我也不是外国人 算了,谷歌下,,,哦。。。1英尺=12英寸,学习了。。。 然后、、、查前面
#include <iostream>
//inch2feet.cpp : 英寸转换英尺工具
int main()
{
	using namespace std;//我竟然忘了
	cout << "请输入自己的身高(英寸):___\b\b\b";//学习了,原来退格是\b
	int inch;//淫荡的声明
	cin >> inch;//接受输入
	const int inch_per_feet = 12;//锁定并声明、设置变量
	int feet = inch / inch_per_feet;//设置变量英尺(计算)
	int rest_inch = inch % inch_per_feet;//设置变量剩余英寸
	cout << "您的身高为 " << feet << " 英尺 "
		<< rest_inch <<" 英寸" <<endl;//输出
	cin.get();
	cin.get();
	return 0;
}

写完了,测试下、、、
OK,成功!
都这么"早"了,我去
保存

2.编写一个小程序,要求以几英尺几英寸的方式输入其身高,并以磅为单位输入其体重(使用3个变量来存储这些信息),该程序报告其BMI(Body Mass Index,体重指数)。为了计算BMI,该程序一英寸的方式指出用户的身高(1英尺为12英寸),并将以英寸为单位的身高转换为以米为单位的身高(1英寸=0.0254米)。然后,将以英寸为单位的体重转换为以千克为单位的体重(1千克=2.2磅)。最后,计算相应的BMI——体重(千克)除以身高(米)的平方。用符号常量来表示各种转换因子。

//feet_inch_pound_to_bmi.cpp 根据英制单位计算体重指数
#include <iostream>
int main()
{
	using namespace std;
	cout << "请输入自己的身高(英尺、英寸):\n请输入英尺部分:";
	int feet;
	cin >> feet;
	cout << "\n请输入英寸部分:";
	int inch;
	cin >> inch;
	cout << "\n请输入体重(磅):";
	double pound;
	cin >> pound;
	const int inch_per_feet = 12;
	int inches = feet * inch_per_feet + inch;
	const double inch_per_meter = 0.0254;
	double meter = inches * inch_per_meter;
	const double pound_per_kilogram = 2.2;
	double kilogram = pound / pound_per_kilogram;
	double BMI = kilogram / meter / meter;
	cout << "您的体重指数为 " << BMI << " 。" <<endl;
	cin.get();
	cin.get();
	return 0;
}

3.编写一个程序,要求用户以度、分、秒的方式输入一个纬度,然后以度为单位显示该纬度。1度为60分,1分等于60秒,请以符号常量的方式表示这些值。对于每个输入值,应使用一个独立的变量存储它。下面是该程序运行时的状况:

 请输入以度、分、秒为格式的纬度:
 首先,输入度数:37
 然后输分:51
 最后输秒:19
 37 度 51 分 19 秒 = 37.8553 度
//degree_convert.cpp 度、分、秒转换度
#include <iostream>
int main()
{
	using namespace std;
	cout << "请输入以度、分、秒为格式的纬度:\n首先,输入度数:";
	int degree;
	cin >> degree;
	cout << "\n然后输分:";
	int minute;
	cin >> minute;
	cout << "\n最后输秒:";
	double second;
	cin >> second;
	const int second_per_minute = 60;
	const int minute_per_degree = 60;
	double float_degree = degree + (minute + second / second_per_minute) / minute_per_degree;
	cout << degree << " 度 " << minute << " 分 " << second << " 秒 = " << float_degree << " 度。" <<endl;
	cin.get();
	cin.get();
	return 0;
}

4.编写一个程序,要求用户以整数方式输入秒数(使用long变量存储),然后以天、小时、分钟和秒钟的方式显示这段时间,使用符号常量来表示每天有多少个小时、每小时有多少分钟以及每分钟有多少秒。该程序的输出应与下面类似

请输入秒数:31600000
31600000 秒 = 365 天 46 分钟  40秒
//second_detail.cpp 将秒转换为日、时、分、秒的详细形式
#include <iostream>
int main()
{
	using namespace std;
	cout << "请输入秒数:";
	long long_second;
	cin >> long_second;
	const int second_per_minute = 60;
	const int minute_per_hour = 60;
	const int hour_per_day = 24;
	int second = long_second % second_per_minute;
	int minute = (long_second / second_per_minute) % minute_per_hour;
	int hour = (long_second / second_per_minute / minute_per_hour) % hour_per_day;
	int day = long_second / second_per_minute / minute_per_hour / hour_per_day;
	cout << long_second << " 秒 = " << day << " 天 " << hour << " 小时 " << minute << " 分钟 " << second << " 秒。"<<endl;
	cin.get();
	cin.get();
	return 0;
}

5.编写一个程序,要求用户输入驱车里程(英里)和使用汽油量(加仑),然后指出汽车耗油量为一加仑的里程。如果愿意,也可以要求用户以公里为单位输入距离,并以升为单位输入汽油量,然后指出欧洲风格的结果——即每100公里的耗油量(升)。

//american_mile_per_gallon.cpp 计算每耗油一加仑时所行驶里程
#include <iostream>
int main()
{
	using namespace std;
	cout << "请输入驱车里程(英里):";
	double mile;
	cin >> mile;
	cout << "请输入耗油量(加仑):";
	double gallon;
	cin >> gallon;
	double mile_per_gallon = mile / gallon;
	cout << "每耗油一加仑时所行驶里程为 " << mile_per_gallon << " 英里。"<<endl;
	cin.get();
	cin.get();
	return 0;
}
//european_liter_per_100_kilometer.cpp 计算每行驶 100 公里耗油量
#include <iostream>
int main()
{
	using namespace std;
	cout << "请输入驱车里程(公里):";
	double kilometer;
	cin >> kilometer;
	cout << "请输入耗油量(升):";
	double liter;
	cin >> liter;
	double liter_per_100_kilometer = liter / kilometer * 100 ;
	cout << "每行驶 100 公里耗油量为 " << liter_per_100_kilometer << " 升。"<<endl;
	cin.get();
	cin.get();
	return 0;
}