Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/gpu/gpu_blacklist.h" | 5 #include "content/browser/gpu/gpu_blacklist.h" |
| 6 | 6 |
| 7 #include "base/json/json_reader.h" | 7 #include "base/json/json_reader.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 589 : max_entry_id_(0) { | 589 : max_entry_id_(0) { |
| 590 browser_version_.reset(Version::GetVersionFromString(browser_version_string)); | 590 browser_version_.reset(Version::GetVersionFromString(browser_version_string)); |
| 591 DCHECK(browser_version_.get() != NULL); | 591 DCHECK(browser_version_.get() != NULL); |
| 592 } | 592 } |
| 593 | 593 |
| 594 GpuBlacklist::~GpuBlacklist() { | 594 GpuBlacklist::~GpuBlacklist() { |
| 595 Clear(); | 595 Clear(); |
| 596 } | 596 } |
| 597 | 597 |
| 598 bool GpuBlacklist::LoadGpuBlacklist(const std::string& json_context, | 598 bool GpuBlacklist::LoadGpuBlacklist(const std::string& json_context, |
| 599 bool current_os_only) { | 599 bool current_os_only, |
|
vangelis
2011/08/18 21:15:11
One more thing. Having two bool's next to each oth
| |
| 600 bool tolerate_errors) { | |
| 600 scoped_ptr<Value> root; | 601 scoped_ptr<Value> root; |
| 601 root.reset(base::JSONReader::Read(json_context, false)); | 602 root.reset(base::JSONReader::Read(json_context, false)); |
| 602 if (root.get() == NULL || !root->IsType(Value::TYPE_DICTIONARY)) | 603 if (root.get() == NULL || !root->IsType(Value::TYPE_DICTIONARY)) |
| 603 return false; | 604 return false; |
| 604 | 605 |
| 605 DictionaryValue* root_dictionary = static_cast<DictionaryValue*>(root.get()); | 606 DictionaryValue* root_dictionary = static_cast<DictionaryValue*>(root.get()); |
| 606 DCHECK(root_dictionary); | 607 DCHECK(root_dictionary); |
| 607 return LoadGpuBlacklist(*root_dictionary, current_os_only); | 608 return LoadGpuBlacklist(*root_dictionary, current_os_only, tolerate_errors); |
| 608 } | 609 } |
| 609 | 610 |
| 610 bool GpuBlacklist::LoadGpuBlacklist(const DictionaryValue& parsed_json, | 611 bool GpuBlacklist::LoadGpuBlacklist(const DictionaryValue& parsed_json, |
| 611 bool current_os_only) { | 612 bool current_os_only, |
| 613 bool tolerate_errors) { | |
| 612 std::vector<GpuBlacklistEntry*> entries; | 614 std::vector<GpuBlacklistEntry*> entries; |
| 613 | 615 |
| 614 std::string version_string; | 616 std::string version_string; |
| 615 parsed_json.GetString("version", &version_string); | 617 parsed_json.GetString("version", &version_string); |
| 616 version_.reset(Version::GetVersionFromString(version_string)); | 618 version_.reset(Version::GetVersionFromString(version_string)); |
| 617 if (version_.get() == NULL) | 619 if (version_.get() == NULL) |
| 618 return false; | 620 return false; |
| 619 | 621 |
| 620 ListValue* list = NULL; | 622 ListValue* list = NULL; |
| 621 if (!parsed_json.GetList("entries", &list)) | 623 if (!parsed_json.GetList("entries", &list)) |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 637 if (browser_version_support == kMalformed) | 639 if (browser_version_support == kMalformed) |
| 638 break; | 640 break; |
| 639 if (browser_version_support == kUnsupported) { | 641 if (browser_version_support == kUnsupported) { |
| 640 entry_count_expectation--; | 642 entry_count_expectation--; |
| 641 continue; | 643 continue; |
| 642 } | 644 } |
| 643 DCHECK(browser_version_support == kSupported); | 645 DCHECK(browser_version_support == kSupported); |
| 644 GpuBlacklistEntry* entry = | 646 GpuBlacklistEntry* entry = |
| 645 GpuBlacklistEntry::GetGpuBlacklistEntryFromValue(list_item, true); | 647 GpuBlacklistEntry::GetGpuBlacklistEntryFromValue(list_item, true); |
| 646 if (entry == NULL) | 648 if (entry == NULL) |
| 647 break; | 649 continue; |
|
vangelis
2011/08/18 20:51:11
It seems to me that entries with unknown fields wi
| |
| 648 if (entry->id() > max_entry_id) | 650 if (entry->id() > max_entry_id) |
| 649 max_entry_id = entry->id(); | 651 max_entry_id = entry->id(); |
| 650 entries.push_back(entry); | 652 entries.push_back(entry); |
| 651 } | 653 } |
| 652 | 654 |
| 653 if (entries.size() != entry_count_expectation) { | 655 if (!tolerate_errors && entries.size() != entry_count_expectation) { |
| 654 for (size_t i = 0; i < entries.size(); ++i) | 656 for (size_t i = 0; i < entries.size(); ++i) |
| 655 delete entries[i]; | 657 delete entries[i]; |
| 656 return false; | 658 return false; |
| 657 } | 659 } |
| 658 | 660 |
| 659 Clear(); | 661 Clear(); |
| 660 // Don't apply GPU blacklist for a non-registered OS. | 662 // Don't apply GPU blacklist for a non-registered OS. |
| 661 OsType os_filter = GetOsType(); | 663 OsType os_filter = GetOsType(); |
| 662 if (os_filter != kOsUnknown) { | 664 if (os_filter != kOsUnknown) { |
| 663 for (size_t i = 0; i < entries.size(); ++i) { | 665 for (size_t i = 0; i < entries.size(); ++i) { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 882 entry->webkit_bugs()[j])); | 884 entry->webkit_bugs()[j])); |
| 883 problem->Set("webkitBugs", webkit_bugs); | 885 problem->Set("webkitBugs", webkit_bugs); |
| 884 | 886 |
| 885 problem_list->Append(problem); | 887 problem_list->Append(problem); |
| 886 } | 888 } |
| 887 status->Set("problems", problem_list); | 889 status->Set("problems", problem_list); |
| 888 } | 890 } |
| 889 return status; | 891 return status; |
| 890 } | 892 } |
| 891 | 893 |
| 894 size_t GpuBlacklist::num_entries() const { | |
| 895 return blacklist_.size(); | |
| 896 } | |
| 897 | |
| 892 uint32 GpuBlacklist::max_entry_id() const { | 898 uint32 GpuBlacklist::max_entry_id() const { |
| 893 return max_entry_id_; | 899 return max_entry_id_; |
| 894 } | 900 } |
| 895 | 901 |
| 896 bool GpuBlacklist::GetVersion(uint16* major, uint16* minor) const { | 902 bool GpuBlacklist::GetVersion(uint16* major, uint16* minor) const { |
| 897 DCHECK(major && minor); | 903 DCHECK(major && minor); |
| 898 *major = 0; | 904 *major = 0; |
| 899 *minor = 0; | 905 *minor = 0; |
| 900 if (version_.get() == NULL) | 906 if (version_.get() == NULL) |
| 901 return false; | 907 return false; |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 963 browser_version_info.reset( | 969 browser_version_info.reset( |
| 964 new VersionInfo(version_op, version_string, version_string2)); | 970 new VersionInfo(version_op, version_string, version_string2)); |
| 965 if (!browser_version_info->IsValid()) | 971 if (!browser_version_info->IsValid()) |
| 966 return kMalformed; | 972 return kMalformed; |
| 967 if (browser_version_info->Contains(*browser_version_)) | 973 if (browser_version_info->Contains(*browser_version_)) |
| 968 return kSupported; | 974 return kSupported; |
| 969 return kUnsupported; | 975 return kUnsupported; |
| 970 } | 976 } |
| 971 return kSupported; | 977 return kSupported; |
| 972 } | 978 } |
| OLD | NEW |