[chromium-dev] Re: What's the real reason of giving up Windows 2000 support?
re: Your comment the cost is big. FWIW: One item that I recall was very complex was the message loop implementation, which handles both native Windows events and coordinates inter-thread Task processing.. It was quite difficult to create a task processing system that integrated with the Windows Message Loop, and subtle differences in Win 2K made processing of the Windows messages both cumbersome (a lot of extra code) and slow (multiple scans of the Windows Message Queue were needed in Win 2K). I think that after we reduced the complexity by abandoning Win 2k we were able to make progress which lead to eventual message loop vs message pump refactoring (to support linux and mac). It might be possible to add back in that Win 2k complexity now (almost as another port) but I will warn you, it was a VERY delicate operation, and performance critical to the app in general. In addition to generic slowdowns, great care must be taken to not starve any of the various task queues (or Windows messages). I'm sure there were many other issues, but the above is one I recall. Caveat coder, Jim On Wed, Jun 24, 2009 at 10:50 PM, pi zhu.she...@gmail.com wrote: I presume that Chromium decided to support Windows 2000 when the project started in 2006. The reasons may be: (1) The profit is big. There were 6% Windows 2000 users in 2006. (2) The cost is small. There should not be too many differences between Windows 2000 (5.0) and Windows XP (5.1). Afterward, Chromium decided to cut out Windows 2000 when the project grew up in 2008. The reasons may be: (1) The profit is small. There were only 2% Windows 2000 users in 2008. Surely, there would be fewer users in future. Furthermore, most of these remaining users were in corporate environments that were locked-down against using chrome as a third party program. (2) The cost is big. Certain of functions need to be implemented cumbersomely for compatibility with Windows 2000. Moreover, some undocumented features of Windows 2000 lead to extra failures. For example, when initializing an impersonated thread of a restricted sandbox process, nt!ZwMapViewOfSection succeeds on Windows XP, but fails as 0xc022 STATUS_ACCESS_DENIED on Windows 2000. Is it right? cpu wrote: Yes, the real reason is that there is an ongoing cost of keep that version working including extra QA cycles for each release. In terms of supporting a windows version with very few users we should focus our efforts on Win7. But you are welcome to keep an external fork. If there is any consolation, this was argued at length a year ago. --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: Should GYP files be UTF8 Encoded?
No use case. I was just creating a new GYP file and wanted to know what encoding to save the file as...that's all :-) On Jun 26, 10:52 pm, Bradley Nelson bradnel...@google.com wrote: The intention was ascii AFAIK. Unless someone has a use case? -BradN On Fri, Jun 26, 2009 at 3:05 PM, Daniel Cowx daniel.c...@gmail.com wrote: Not that I'm aware of. Just wanted to confirm that intention is ASCII for now unless need arises. On Jun 26, 2:18 pm, Dan Kegel daniel.r.ke...@gmail.com wrote: On Fri, Jun 26, 2009 at 1:50 PM, Daniel Cowxdaniel.c...@gmail.com wrote: Should GYP files be UTF8 Encoded? We can probably get away with ascii for now... are there any filenames that really need to be in a wider character set? --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] How do I *undefine* a define in GYP?
I have a third_party project that assumes that WIN32_LEAN_AND_MEAN is *not* defined. Unfortunately, common.gypi defines it, so I'm getting lots of compiler errors that I dont particularly want to track down. What's teh best way to either a) undefine WIN32_LEAN_AND_MEAN from common.gypi, or b) ensure that it's excluded when my project is generated? Thanks --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: How do I *undefine* a define in GYP?
Okay, I've figured out that I can do: snip 'msvs_settings': { 'VCCLCompilerTool': { 'UndefinePreprocessorDefinitions': 'WIN32_LEAN_AND_MEAN', }, }, /snip Though this works, it will cause a command line warning D9025 to be issued b/c you're undefining a previous define. I'd prefer if there was a way to remove the inclusion of /D WIN32_LEAN_AND_MEAN from common.gypi when my project is being generated. Is this possible? On Jun 27, 1:26 pm, Daniel Cowx daniel.c...@gmail.com wrote: I have a third_party project that assumes that WIN32_LEAN_AND_MEAN is *not* defined. Unfortunately, common.gypi defines it, so I'm getting lots of compiler errors that I dont particularly want to track down. What's teh best way to either a) undefine WIN32_LEAN_AND_MEAN from common.gypi, or b) ensure that it's excluded when my project is generated? Thanks --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: How do I *undefine* a define in GYP?
You can undefine items with: 'defines!: [ 'WIN32_LEAN_AND_MEAN', ], -BradN On Sat, Jun 27, 2009 at 1:47 PM, Daniel Cowx daniel.c...@gmail.com wrote: Okay, I've figured out that I can do: snip 'msvs_settings': { 'VCCLCompilerTool': { 'UndefinePreprocessorDefinitions': 'WIN32_LEAN_AND_MEAN', }, }, /snip Though this works, it will cause a command line warning D9025 to be issued b/c you're undefining a previous define. I'd prefer if there was a way to remove the inclusion of /D WIN32_LEAN_AND_MEAN from common.gypi when my project is being generated. Is this possible? On Jun 27, 1:26 pm, Daniel Cowx daniel.c...@gmail.com wrote: I have a third_party project that assumes that WIN32_LEAN_AND_MEAN is *not* defined. Unfortunately, common.gypi defines it, so I'm getting lots of compiler errors that I dont particularly want to track down. What's teh best way to either a) undefine WIN32_LEAN_AND_MEAN from common.gypi, or b) ensure that it's excluded when my project is generated? Thanks --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: How do I *undefine* a define in GYP?
Awesome. Thanks Brad! On Jun 27, 1:52 pm, Bradley Nelson bradnel...@google.com wrote: You can undefine items with: 'defines!: [ 'WIN32_LEAN_AND_MEAN', ], -BradN On Sat, Jun 27, 2009 at 1:47 PM, Daniel Cowx daniel.c...@gmail.com wrote: Okay, I've figured out that I can do: snip 'msvs_settings': { 'VCCLCompilerTool': { 'UndefinePreprocessorDefinitions': 'WIN32_LEAN_AND_MEAN', }, }, /snip Though this works, it will cause a command line warning D9025 to be issued b/c you're undefining a previous define. I'd prefer if there was a way to remove the inclusion of /D WIN32_LEAN_AND_MEAN from common.gypi when my project is being generated. Is this possible? On Jun 27, 1:26 pm, Daniel Cowx daniel.c...@gmail.com wrote: I have a third_party project that assumes that WIN32_LEAN_AND_MEAN is *not* defined. Unfortunately, common.gypi defines it, so I'm getting lots of compiler errors that I dont particularly want to track down. What's teh best way to either a) undefine WIN32_LEAN_AND_MEAN from common.gypi, or b) ensure that it's excluded when my project is generated? Thanks --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: Memory usage in chrome
If I recall correctly, the best way we found to measure the total memory usage of a multi-process system like chrome was to measure the total commit charge of windows as you run the test. This will correctly account for shared memory, mapped pages that have been touched, kernel memory, etc. I don't recall if it includes virtual alloced paged that haven't been made real. The big limitation is that your test needs to be the only thing running on the machine. Linus On Thu, Jun 25, 2009 at 4:11 PM, Mike Beltzner beltz...@mozilla.com wrote: On 25-Jun-09, at 7:02 PM, Mike Belshe wrote: This screen actually confuses me a little, as the Summary statistics don't match the summation of the process based statistics. Do you mean to say your summary statistics take into account the memory that's being shared across the various processes? Correct. The shared across all processes is a bit of a hack, because you can't know exactly which pages are shared across every single process. We do a heuristic. Cool! Good to know. I'll take a peek into that code you mentioned to see what the heuristic is that you're using. Interestingly, as I watched this value change while webpages were loading, it tracked the same pattern of growth/decline as Memory (Private Working Set) in the Task Manager, though the values were usually about 2x or so more. I suppose this is due to the heap sharing you were speaking of earlier? I'm not quite sure what you mean. I'm basically being lazy. I'd like to not have to make my own counter for Private Working Set, so I watched the values of Memory (Private Working Set) and Commit Size in the Task Manager as the test ran, and noticed that they increased/decreased at the same time, and the delta between them was a near constant 2x. Since my interest here is developing a metric that can help us understand when we're regressing/ improving memory usage, the exact value isn't as important to me as the delta. If the deltas are simply off by a constant factor, I could live with that. As I said: lazy! The Working Set - Private counter doesn't seem to have a structure according to the MSDN document; that's what maps to the Memory (Private Working Set) column in the TaskManager. Right, I think you have to use QueryWorkingSet, walk the pages and categorize them yourself. OK, I can look into trying that. Though I'm wondering if it's worth the bother, as the meta-pattern, to me, is more interesting than the precise megabyte count. For a single process browser, it's not worth the effort; I think it's the only way to know how to account for shared memory. The closest thing I can find is the Working Set counter, which uses the PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize structure and shows up in the Vista Task Manager as Working Set (Memory) For multi-proc browsers like chrome, this will way overstate RAM; there is a good 5-6MB of shared working set in each process. So for 10 tabs, you'd could an extra 50MB for Chrome if you do it this way. Looking both in Task Manager and about:memory, when I have 30 tabs open I'm not seeing 30 processes. Are you sure you're right about this point? You don't always get a new process for every tab. If two tabs are connected via javascript, then they'll be in the same process (the about:memory shows which tabs are in the same process). So, clicking a link, for example, will open in the same tab, but typing the URL in the omnibox will create a new process. Others could tell you more about the exact policy for when you get a new process and when you don't. Someone just did in IRC, actually. Apparently in addition to what you said, as soon as a page is in cache, processes get pooled. I clear caches between test runs, but it sounds like since we're calling these with window.open() in our test, they all get placed in the same process. Overall, though, that should mean that we're *not* double counting memory. In fact, when I observed as the test ran, there were only three processes: one for the browser, one for the single content process from which all tabs were spawned, and one for Shockwave/Flash. Good news, I guess, in terms of reporting accurately! OK - I think this might basically use one renderer process in chrome? Because of the new-process creation policy, it may not be representative of real world usage. Darin? Right, but AIUI, it's an erring on the side of reporting less, not more. If there's a better way to automate pageloads that represents real world usage, please let me know. The whole while, we measure the amount of memory taken using the PROCESS_MEMORY_COUNTERS structure, summating over processes when multiple exist (as they do in the case of Internet Explorer 8 and Chrome 2) Ok - that will double count shared memory. I'd estimate 3-5MB per process. So we're talking about over-reporting by 9-15MB across the
[chromium-dev] Re: middle click on home
This is fine except for the other 50% of users who do want the browser to change tabs for them. And before you reply with there are more than 50% of users who want new tabs queued in the background or say that it's your preference, I would like to see explicitly a statement from Google's testing if it actually is so and preferably with quantified stats please. On Jun 26, 5:22 pm, Peter Kasting pkast...@google.com wrote: Given that there are a large number of ways to open the home page in a new foreground tab (e.g. ctrl-t + click, shift-middle click, etc.), there are a very large number of other places in the UI where middle-click opens a new background tab (including other toolbar buttons), there are no places I can think of offhand where middle-click opens a new foreground tab, and this behavior matches other browsers, I'm opposed to changing this. Besides, in at least my own use, background tabs would be more useful anyway. I never want the browser to change tabs for me and I queue up things as I think about them so I will do them in order. PK On Jun 26, 2009 5:09 PM, Evan Martin e...@chromium.org wrote: On Fri, Jun 26, 2009 at 5:06 PM, Peter Kastingpkast...@google.com wrote: I don't understand; wha... Sorry, I failed to make that explicit: Open in foreground. (See original mail about false benefits of consistency.) (Yes, this behavior is intentional; all the toolbar buttons handle clicks/modifiers now, so e... --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: Memory usage in chrome
On Sat, Jun 27, 2009 at 2:50 PM, Linus Upsonli...@google.com wrote: If I recall correctly, the best way we found to measure the total memory usage of a multi-process system like chrome was to measure the total commit charge of windows as you run the test. My favorite test is to plot the performance of the app on some benchmark as a function of the amount of memory the computer is booted with. Comparing that plot for two different apps gives you a pretty clear picture of relative RAM requirements. Chrome kicked the bejeesus out of Firefox last time I tried that, but I think that was before Firefox 3.5. - Dan --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---
[chromium-dev] Re: Memory usage in chrome
This one is the hardest to test, you need to run a pristinely clean system to execute. Also - don't forget to make the browser window sizes the same (and with the same amount of visible window) for all browsers under test, because if the kernel can't offload to the graphics card, the display memory will be counted here. But yeah, if you can make all that work, then it is a good test! mike On Sat, Jun 27, 2009 at 2:50 PM, Linus Upson li...@google.com wrote: If I recall correctly, the best way we found to measure the total memory usage of a multi-process system like chrome was to measure the total commit charge of windows as you run the test. This will correctly account for shared memory, mapped pages that have been touched, kernel memory, etc. I don't recall if it includes virtual alloced paged that haven't been made real. The big limitation is that your test needs to be the only thing running on the machine. Linus On Thu, Jun 25, 2009 at 4:11 PM, Mike Beltzner beltz...@mozilla.comwrote: On 25-Jun-09, at 7:02 PM, Mike Belshe wrote: This screen actually confuses me a little, as the Summary statistics don't match the summation of the process based statistics. Do you mean to say your summary statistics take into account the memory that's being shared across the various processes? Correct. The shared across all processes is a bit of a hack, because you can't know exactly which pages are shared across every single process. We do a heuristic. Cool! Good to know. I'll take a peek into that code you mentioned to see what the heuristic is that you're using. Interestingly, as I watched this value change while webpages were loading, it tracked the same pattern of growth/decline as Memory (Private Working Set) in the Task Manager, though the values were usually about 2x or so more. I suppose this is due to the heap sharing you were speaking of earlier? I'm not quite sure what you mean. I'm basically being lazy. I'd like to not have to make my own counter for Private Working Set, so I watched the values of Memory (Private Working Set) and Commit Size in the Task Manager as the test ran, and noticed that they increased/decreased at the same time, and the delta between them was a near constant 2x. Since my interest here is developing a metric that can help us understand when we're regressing/ improving memory usage, the exact value isn't as important to me as the delta. If the deltas are simply off by a constant factor, I could live with that. As I said: lazy! The Working Set - Private counter doesn't seem to have a structure according to the MSDN document; that's what maps to the Memory (Private Working Set) column in the TaskManager. Right, I think you have to use QueryWorkingSet, walk the pages and categorize them yourself. OK, I can look into trying that. Though I'm wondering if it's worth the bother, as the meta-pattern, to me, is more interesting than the precise megabyte count. For a single process browser, it's not worth the effort; I think it's the only way to know how to account for shared memory. The closest thing I can find is the Working Set counter, which uses the PROCESS_MEMORY_COUNTERS_EX.WorkingSetSize structure and shows up in the Vista Task Manager as Working Set (Memory) For multi-proc browsers like chrome, this will way overstate RAM; there is a good 5-6MB of shared working set in each process. So for 10 tabs, you'd could an extra 50MB for Chrome if you do it this way. Looking both in Task Manager and about:memory, when I have 30 tabs open I'm not seeing 30 processes. Are you sure you're right about this point? You don't always get a new process for every tab. If two tabs are connected via javascript, then they'll be in the same process (the about:memory shows which tabs are in the same process). So, clicking a link, for example, will open in the same tab, but typing the URL in the omnibox will create a new process. Others could tell you more about the exact policy for when you get a new process and when you don't. Someone just did in IRC, actually. Apparently in addition to what you said, as soon as a page is in cache, processes get pooled. I clear caches between test runs, but it sounds like since we're calling these with window.open() in our test, they all get placed in the same process. Overall, though, that should mean that we're *not* double counting memory. In fact, when I observed as the test ran, there were only three processes: one for the browser, one for the single content process from which all tabs were spawned, and one for Shockwave/Flash. Good news, I guess, in terms of reporting accurately! OK - I think this might basically use one renderer process in chrome? Because of the new-process creation policy, it may not be representative of real world usage. Darin? Right, but AIUI, it's an erring on the side of reporting less,
[chromium-dev] Re: changing chrome_exe to chrome, converting chrome.exe to gyp
Hi Dean, So I've dropped in a change that switches directories to have name like: (base) (test_shell) This will allow you to run things at the command line again. I don't find this choice particularly ascetic myself. But the options where limited, because the following characters cannot appear in solution folder names: / ? : \ *| # % Let me know if you run into any more problems with this. Also definitely let me know if someone thinks of something less ugly. -BradN On Fri, Jun 19, 2009 at 3:10 AM, Dean McNamee de...@chromium.org wrote: This also broke building from the command line. I usually never open Visual Studio as an IDE. I build on the command line with something like: devenv chrome\\chrome.sln /Build release /Project test_shell It looks like project names like test_shell now have complicated names like test_shell (webkit\tools\test_shell\test_shell), and I haven't been able to manage supplying those on the command line. Is there a way we can get back our nice project names test_shell, chrome, etc? On Fri, Jun 19, 2009 at 1:30 AM, Andrew Scherkusscher...@chromium.org wrote: Here's a quick example: 1) Delete whole Debug directory 2) gclient runhooks --force 3) Set test_shell as startup project 4) Hit F5 Sample output of things that shouldn't be dependencies (mostly because they're other executables) sandbox (sandbox\sandbox) - Debug Win32 chrome_dll - Debug Win32 net_perftests - Debug Win32 base_unittests - Debug Win32 net_unittests - Debug Win32 v8_shell - Debug Win32 mini_installer - Debug Win32 test_support_unit - Debug Win32 test_support_ui - Debug Win32 codesighs (third_party\codesighs\codesighs) - Debug Win32 automated_ui_tests - Debug Win32 memory_test - Debug Win32 activex_test_control - Debug Win32 On Thu, Jun 18, 2009 at 4:08 PM, Bradley Nelson bradnel...@google.com wrote: Andrew, can you give an example of something that built that shouldn't have for test_shell? Maybe we have some overspecified dependencies as well. -BradN On Thu, Jun 18, 2009 at 3:49 PM, Andrew Scherkus scher...@chromium.org wrote: I'll see if I can repro this again before filing a bug, but similar to what Daniel and John reported, when I right click on test_shell and say Build it builds the minimal set required to fully build+link test_shell.exe However when I set test_shell as the start-up project and launch the debugger, Visual Studio warns that every other project in chrome.sln must be built before running (not true!). Is there a difference in build vs. runtime dependencies? Andrew On Thu, Jun 18, 2009 at 3:25 PM, Steven Knight s...@chromium.org wrote: All-- When you notice missing dependencies, pleased add them to the necessary .gyp file(s)! One of the main reasons we've been trying to land all this stuff is so that tracking down all these pieces isn't single-threaded through one person (or two). If you're not comfortable making the change yourself, then please file a bug so the dependency problems get tracked and fixed in an organized fashion. Re: unnecessary rebuilds: please file bugs so they don't get lost. Please include the target you were building, and the the libs/targets that were rebuilt unnecessarily. You don't have to be exhaustive about the list, it's more important here that at least some information gets collected and doesn't languish on the ML or get dropped on the floor. I'm working on a buildbot script that will test for missing dependencies by building every target from scratch individually, and will then test for unnecessary rebuilds by rebuilding each target after no updates. That's been taking a back seat to just getting the conversion completed, but I've accelerated my work on it as we wind down to the last few targets. --SK On Thu, Jun 18, 2009 at 3:11 PM, John Abd-El-Malek j...@chromium.org wrote: On Thu, Jun 18, 2009 at 3:10 PM, John Abd-El-Malek j...@chromium.org wrote: Yeah it happened to me before as well, I just figured I'd complain now.. Note another missing dependency is on crash_service.exe , npapi_layout_test_plugin, and npapi_test_plugin btw just to be clear, these are missing dependencies on ui_tests. On Thu, Jun 18, 2009 at 3:00 PM, Jeremy Orlow jor...@google.com wrote: I actually had this problem _before_ this change. Guess I should have brought it up, but I figured it was just something funny on my system. On Thu, Jun 18, 2009 at 2:21 PM, John Abd-El-Malek j...@chromium.org wrote: +1 this is affecting a lot of people. On Thu, Jun 18, 2009 at 12:43 PM, Daniel Cowx daniel.c...@gmail.com wrote: I notice that when I load chrome.sln and do a build, not all the dependencies are built anymore. For instance, theme_dll isn't built (not listed in the proj deps), is this
[chromium-dev] Re: middle click on home
I argued from the point of consistency and mentioned my personal preference only as an afternote to point out that the consistent behavior would not be universally despised. PK On Jun 27, 2009 4:08 PM, krtulmay krtul...@gmail.com wrote: This is fine except for the other 50% of users who do want the browser to change tabs for them. And before you reply with there are more than 50% of users who want new tabs queued in the background or say that it's your preference, I would like to see explicitly a statement from Google's testing if it actually is so and preferably with quantified stats please. On Jun 26, 5:22 pm, Peter Kasting pkast...@google.com wrote: Given that there are a large numbe... On Jun 26, 2009 5:09 PM, Evan Martin e...@chromium.org wrote: On Fri, Jun 26, 2009 at 5:06 PM, Peter Kastingpkast...@google.com wrote:I don't underst... --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev... --~--~-~--~~~---~--~~ Chromium Developers mailing list: chromium-dev@googlegroups.com View archives, change email options, or unsubscribe: http://groups.google.com/group/chromium-dev -~--~~~~--~~--~--~---