Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(336)

Side by Side Diff: content/browser/gpu/gpu_blacklist.cc

Issue 7967020: Implement --use-gl=any (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/browser/gpu/gpu_blacklist.h ('k') | content/browser/gpu/gpu_data_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 16 matching lines...) Expand all
27 if (pieces.size() != 3) 27 if (pieces.size() != 3)
28 return NULL; 28 return NULL;
29 std::string date_as_version_string = pieces[2]; 29 std::string date_as_version_string = pieces[2];
30 for (size_t i = 0; i < 2; ++i) { 30 for (size_t i = 0; i < 2; ++i) {
31 date_as_version_string += "."; 31 date_as_version_string += ".";
32 date_as_version_string += pieces[i]; 32 date_as_version_string += pieces[i];
33 } 33 }
34 return Version::GetVersionFromString(date_as_version_string); 34 return Version::GetVersionFromString(date_as_version_string);
35 } 35 }
36 36
37 Value* NewStatusValue(const char* name, const char* status)
38 {
39 DictionaryValue* value = new DictionaryValue();
40 value->SetString("name", name);
41 value->SetString("status", status);
42 return value;
43 }
44
45 } // namespace anonymous 37 } // namespace anonymous
46 38
47 GpuBlacklist::VersionInfo::VersionInfo(const std::string& version_op, 39 GpuBlacklist::VersionInfo::VersionInfo(const std::string& version_op,
48 const std::string& version_string, 40 const std::string& version_string,
49 const std::string& version_string2) { 41 const std::string& version_string2) {
50 op_ = StringToOp(version_op); 42 op_ = StringToOp(version_op);
51 if (op_ == kUnknown || op_ == kAny) 43 if (op_ == kUnknown || op_ == kAny)
52 return; 44 return;
53 version_.reset(Version::GetVersionFromString(version_string)); 45 version_.reset(Version::GetVersionFromString(version_string));
54 if (version_.get() == NULL) { 46 if (version_.get() == NULL) {
(...skipping 725 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 std::vector<uint32>& entry_ids, 772 std::vector<uint32>& entry_ids,
781 bool disabled) const { 773 bool disabled) const {
782 entry_ids.clear(); 774 entry_ids.clear();
783 for (size_t i = 0; i < active_entries_.size(); ++i) { 775 for (size_t i = 0; i < active_entries_.size(); ++i) {
784 if (((feature & active_entries_[i]->GetGpuFeatureFlags().flags()) != 0) && 776 if (((feature & active_entries_[i]->GetGpuFeatureFlags().flags()) != 0) &&
785 disabled == active_entries_[i]->disabled()) 777 disabled == active_entries_[i]->disabled())
786 entry_ids.push_back(active_entries_[i]->id()); 778 entry_ids.push_back(active_entries_[i]->id());
787 } 779 }
788 } 780 }
789 781
790 bool GpuBlacklist::IsFeatureBlacklisted( 782 void GpuBlacklist::GetBlacklistReasons(ListValue* problem_list) const {
791 GpuFeatureFlags::GpuFeatureType feature) const 783 DCHECK(problem_list);
792 {
793 for (size_t i = 0; i < active_entries_.size(); ++i) { 784 for (size_t i = 0; i < active_entries_.size(); ++i) {
794 if (active_entries_[i]->GetGpuFeatureFlags().flags() & feature) 785 GpuBlacklistEntry* entry = active_entries_[i];
795 return true; 786 if (entry->disabled())
787 continue;
788 DictionaryValue* problem = new DictionaryValue();
789
790 problem->SetString("description", entry->description());
791
792 ListValue* cr_bugs = new ListValue();
793 for (size_t j = 0; j < entry->cr_bugs().size(); ++j)
794 cr_bugs->Append(Value::CreateIntegerValue(entry->cr_bugs()[j]));
795 problem->Set("crBugs", cr_bugs);
796
797 ListValue* webkit_bugs = new ListValue();
798 for (size_t j = 0; j < entry->webkit_bugs().size(); ++j) {
799 webkit_bugs->Append(Value::CreateIntegerValue(
800 entry->webkit_bugs()[j]));
801 }
802 problem->Set("webkitBugs", webkit_bugs);
803
804 problem_list->Append(problem);
796 } 805 }
797 return false;
798 }
799
800 Value* GpuBlacklist::GetFeatureStatus(bool gpu_access_allowed,
801 bool disable_accelerated_compositing,
802 bool disable_accelerated_2D_canvas,
803 bool disable_experimental_webgl,
804 bool disable_multisampling) const {
805 DictionaryValue* status = new DictionaryValue();
806
807 // Build the feature_status field.
808 {
809 ListValue* feature_status_list = new ListValue();
810
811 // 2d_canvas.
812 if (!gpu_access_allowed) {
813 if (disable_accelerated_2D_canvas)
814 feature_status_list->Append(NewStatusValue("2d_canvas",
815 "software"));
816 else
817 feature_status_list->Append(NewStatusValue("2d_canvas",
818 "unavailable_software"));
819 } else if (!disable_accelerated_2D_canvas) {
820 if (IsFeatureBlacklisted(
821 GpuFeatureFlags::kGpuFeatureAccelerated2dCanvas))
822 feature_status_list->Append(NewStatusValue("2d_canvas",
823 "unavailable_software"));
824 else if (disable_accelerated_compositing)
825 feature_status_list->Append(NewStatusValue("2d_canvas",
826 "disabled_software"));
827 else
828 feature_status_list->Append(NewStatusValue("2d_canvas",
829 "enabled"));
830 } else {
831 feature_status_list->Append(NewStatusValue("2d_canvas",
832 "software"));
833 }
834
835 // 3d css and compositing.
836 if (!gpu_access_allowed) {
837 feature_status_list->Append(NewStatusValue("3d_css",
838 "unavailable_off"));
839 feature_status_list->Append(NewStatusValue("compositing",
840 "unavailable_software"));
841 } else if (disable_accelerated_compositing) {
842 feature_status_list->Append(NewStatusValue("3d_css",
843 "unavailable_off"));
844 feature_status_list->Append(NewStatusValue("compositing",
845 "disabled_software"));
846 } else if (IsFeatureBlacklisted(
847 GpuFeatureFlags::kGpuFeatureAcceleratedCompositing)) {
848 feature_status_list->Append(NewStatusValue("3d_css",
849 "unavailable_off"));
850 feature_status_list->Append(NewStatusValue("compositing",
851 "disabled_software"));
852 } else {
853 feature_status_list->Append(NewStatusValue("3d_css",
854 "enabled"));
855 feature_status_list->Append(NewStatusValue("compositing",
856 "enabled"));
857 }
858
859 // webgl
860 if (!gpu_access_allowed)
861 feature_status_list->Append(NewStatusValue("webgl",
862 "unavailable_off"));
863 else if (disable_experimental_webgl)
864 feature_status_list->Append(NewStatusValue("webgl",
865 "disabled_off"));
866 else if (IsFeatureBlacklisted(
867 GpuFeatureFlags::kGpuFeatureWebgl))
868 feature_status_list->Append(NewStatusValue("webgl",
869 "unavailable_off"));
870 else if (disable_accelerated_compositing)
871 feature_status_list->Append(NewStatusValue("webgl",
872 "enabled_readback"));
873 else
874 feature_status_list->Append(NewStatusValue("webgl",
875 "enabled"));
876
877 // multisampling
878 if (!gpu_access_allowed)
879 feature_status_list->Append(NewStatusValue("multisampling",
880 "unavailable_off"));
881 else if (disable_multisampling)
882 feature_status_list->Append(NewStatusValue("multisampling",
883 "disabled_off"));
884 else if (IsFeatureBlacklisted(
885 GpuFeatureFlags::kGpuFeatureMultisampling))
886 feature_status_list->Append(NewStatusValue("multisampling",
887 "disabled_off"));
888 else
889 feature_status_list->Append(NewStatusValue("multisampling",
890 "enabled"));
891
892 status->Set("featureStatus", feature_status_list);
893 }
894
895 // Build the problems list.
896 {
897 ListValue* problem_list = new ListValue();
898 if (!gpu_access_allowed) {
899 DictionaryValue* problem = new DictionaryValue();
900 problem->SetString("description",
901 "GPU process was unable to boot. Access to GPU disallowed.");
902 problem->Set("crBugs", new ListValue());
903 problem->Set("webkitBugs", new ListValue());
904 problem_list->Append(problem);
905 }
906 if (disable_accelerated_2D_canvas) {
907 DictionaryValue* problem = new DictionaryValue();
908 problem->SetString("description",
909 "Accelerated 2D canvas has been disabled at the command line");
910 problem->Set("crBugs", new ListValue());
911 problem->Set("webkitBugs", new ListValue());
912 problem_list->Append(problem);
913 }
914 if (disable_accelerated_compositing) {
915 DictionaryValue* problem = new DictionaryValue();
916 problem->SetString("description",
917 "Accelerated compositing has been disabled, either via about:flags "
918 "or command line. This adversely affects performance of all hardware "
919 " accelerated features.");
920 problem->Set("crBugs", new ListValue());
921 problem->Set("webkitBugs", new ListValue());
922 problem_list->Append(problem);
923 }
924 if (disable_experimental_webgl) {
925 DictionaryValue* problem = new DictionaryValue();
926 problem->SetString("description",
927 "WebGL has been disabled, either via about:flags "
928 "or command line");
929 problem->Set("crBugs", new ListValue());
930 problem->Set("webkitBugs", new ListValue());
931 problem_list->Append(problem);
932 }
933 if (disable_multisampling) {
934 DictionaryValue* problem = new DictionaryValue();
935 problem->SetString("description",
936 "Multisampling has been disabled, either via about:flags "
937 "or command line");
938 problem->Set("crBugs", new ListValue());
939 problem->Set("webkitBugs", new ListValue());
940 problem_list->Append(problem);
941 }
942 for (size_t i = 0; i < active_entries_.size(); ++i) {
943 ScopedGpuBlacklistEntry entry = active_entries_[i];
944 DictionaryValue* problem = new DictionaryValue();
945
946 problem->SetString("description", entry->description());
947
948 ListValue* cr_bugs = new ListValue();
949 for (size_t j = 0; j < entry->cr_bugs().size(); ++j)
950 cr_bugs->Append(Value::CreateIntegerValue(
951 entry->cr_bugs()[j]));
952 problem->Set("crBugs", cr_bugs);
953
954 ListValue* webkit_bugs = new ListValue();
955 for (size_t j = 0; j < entry->webkit_bugs().size(); ++j)
956 webkit_bugs->Append(Value::CreateIntegerValue(
957 entry->webkit_bugs()[j]));
958 problem->Set("webkitBugs", webkit_bugs);
959
960 problem_list->Append(problem);
961 }
962 status->Set("problems", problem_list);
963 }
964 return status;
965 } 806 }
966 807
967 size_t GpuBlacklist::num_entries() const { 808 size_t GpuBlacklist::num_entries() const {
968 return blacklist_.size(); 809 return blacklist_.size();
969 } 810 }
970 811
971 uint32 GpuBlacklist::max_entry_id() const { 812 uint32 GpuBlacklist::max_entry_id() const {
972 return max_entry_id_; 813 return max_entry_id_;
973 } 814 }
974 815
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1072 return kStable; 913 return kStable;
1073 if (value == "beta") 914 if (value == "beta")
1074 return kBeta; 915 return kBeta;
1075 if (value == "dev") 916 if (value == "dev")
1076 return kDev; 917 return kDev;
1077 if (value == "canary") 918 if (value == "canary")
1078 return kCanary; 919 return kCanary;
1079 return kUnknown; 920 return kUnknown;
1080 } 921 }
1081 922
OLDNEW
« no previous file with comments | « content/browser/gpu/gpu_blacklist.h ('k') | content/browser/gpu/gpu_data_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698