OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "base/json/json_reader.h" | 5 #include "base/json/json_reader.h" |
6 #include "gpu/config/gpu_control_list.h" | 6 #include "gpu/config/gpu_control_list.h" |
7 #include "gpu/config/gpu_info.h" | 7 #include "gpu/config/gpu_info.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 | 9 |
10 #define LONG_STRING_CONST(...) #__VA_ARGS__ | 10 #define LONG_STRING_CONST(...) #__VA_ARGS__ |
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
463 gpu_info.gl_version = "3.0 NVIDIA-8.24.11 310.90.9b01"; | 463 gpu_info.gl_version = "3.0 NVIDIA-8.24.11 310.90.9b01"; |
464 EXPECT_TRUE(entry->Contains(GpuControlList::kOsMacosx, "10.9", gpu_info)); | 464 EXPECT_TRUE(entry->Contains(GpuControlList::kOsMacosx, "10.9", gpu_info)); |
465 | 465 |
466 gpu_info.gl_version = "4.0 NVIDIA-8.24.11 310.90.9b01"; | 466 gpu_info.gl_version = "4.0 NVIDIA-8.24.11 310.90.9b01"; |
467 EXPECT_FALSE(entry->Contains(GpuControlList::kOsMacosx, "10.9", gpu_info)); | 467 EXPECT_FALSE(entry->Contains(GpuControlList::kOsMacosx, "10.9", gpu_info)); |
468 | 468 |
469 gpu_info.gl_version = "OpenGL ES 3.0 (ANGLE 1.2.0.2450)"; | 469 gpu_info.gl_version = "OpenGL ES 3.0 (ANGLE 1.2.0.2450)"; |
470 EXPECT_FALSE(entry->Contains(GpuControlList::kOsWin, "6.1", gpu_info)); | 470 EXPECT_FALSE(entry->Contains(GpuControlList::kOsWin, "6.1", gpu_info)); |
471 } | 471 } |
472 | 472 |
473 TEST_F(GpuControlListEntryTest, GlVendorEntry) { | 473 TEST_F(GpuControlListEntryTest, GlVendorEqual) { |
474 const std::string json = LONG_STRING_CONST( | 474 const std::string json = LONG_STRING_CONST( |
475 { | 475 { |
476 "id": 1, | 476 "id": 1, |
477 "gl_vendor": { | 477 "gl_vendor": "NVIDIA", |
478 "op": "beginwith", | |
479 "value": "NVIDIA" | |
480 }, | |
481 "features": [ | 478 "features": [ |
482 "test_feature_0" | 479 "test_feature_0" |
483 ] | 480 ] |
484 } | 481 } |
485 ); | 482 ); |
486 ScopedEntry entry(GetEntryFromString(json)); | 483 ScopedEntry entry(GetEntryFromString(json)); |
487 EXPECT_TRUE(entry.get() != NULL); | 484 EXPECT_TRUE(entry.get() != NULL); |
488 | 485 |
489 const GpuControlList::OsType os_type[] = { | 486 GPUInfo gpu_info; |
490 GpuControlList::kOsMacosx, | 487 gpu_info.gl_vendor = "NVIDIA"; |
491 GpuControlList::kOsWin, | 488 EXPECT_TRUE(entry->Contains( |
492 GpuControlList::kOsLinux, | 489 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
493 GpuControlList::kOsChromeOS, | 490 |
494 GpuControlList::kOsAndroid | 491 // Case sensitive. |
495 }; | 492 gpu_info.gl_vendor = "NVidia"; |
496 for (size_t i = 0; i < arraysize(os_type); ++i) | 493 EXPECT_FALSE(entry->Contains( |
497 EXPECT_TRUE(entry->Contains(os_type[i], "10.6", gpu_info())); | 494 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 495 |
| 496 gpu_info.gl_vendor = "NVIDIA-x"; |
| 497 EXPECT_FALSE(entry->Contains( |
| 498 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
498 } | 499 } |
499 | 500 |
500 TEST_F(GpuControlListEntryTest, GlRendererEntry) { | 501 TEST_F(GpuControlListEntryTest, GlVendorWithDot) { |
501 const std::string json = LONG_STRING_CONST( | 502 const std::string json = LONG_STRING_CONST( |
502 { | 503 { |
503 "id": 1, | 504 "id": 1, |
504 "gl_renderer": { | 505 "gl_vendor": "X\\.Org.*", |
505 "op": "contains", | |
506 "value": "GeForce" | |
507 }, | |
508 "features": [ | 506 "features": [ |
509 "test_feature_0" | 507 "test_feature_0" |
510 ] | 508 ] |
511 } | 509 } |
512 ); | 510 ); |
513 ScopedEntry entry(GetEntryFromString(json)); | 511 ScopedEntry entry(GetEntryFromString(json)); |
514 EXPECT_TRUE(entry.get() != NULL); | 512 EXPECT_TRUE(entry.get() != NULL); |
515 | 513 |
516 const GpuControlList::OsType os_type[] = { | 514 GPUInfo gpu_info; |
517 GpuControlList::kOsMacosx, | 515 gpu_info.gl_vendor = "X.Org R300 Project"; |
518 GpuControlList::kOsWin, | 516 EXPECT_TRUE(entry->Contains( |
519 GpuControlList::kOsLinux, | 517 GpuControlList::kOsLinux, "", gpu_info)); |
520 GpuControlList::kOsChromeOS, | 518 |
521 GpuControlList::kOsAndroid | 519 gpu_info.gl_vendor = "X.Org"; |
522 }; | 520 EXPECT_TRUE(entry->Contains( |
523 for (size_t i = 0; i < arraysize(os_type); ++i) | 521 GpuControlList::kOsLinux, "", gpu_info)); |
524 EXPECT_TRUE(entry->Contains(os_type[i], "10.6", gpu_info())); | 522 } |
| 523 |
| 524 TEST_F(GpuControlListEntryTest, GlRendererContains) { |
| 525 const std::string json = LONG_STRING_CONST( |
| 526 { |
| 527 "id": 1, |
| 528 "gl_renderer": ".*GeForce.*", |
| 529 "features": [ |
| 530 "test_feature_0" |
| 531 ] |
| 532 } |
| 533 ); |
| 534 ScopedEntry entry(GetEntryFromString(json)); |
| 535 EXPECT_TRUE(entry.get() != NULL); |
| 536 |
| 537 GPUInfo gpu_info; |
| 538 gpu_info.gl_renderer = "NVIDIA GeForce GT 120 OpenGL Engine"; |
| 539 EXPECT_TRUE(entry->Contains( |
| 540 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 541 |
| 542 // Case sensitive. |
| 543 gpu_info.gl_renderer = "NVIDIA GEFORCE GT 120 OpenGL Engine"; |
| 544 EXPECT_FALSE(entry->Contains( |
| 545 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 546 |
| 547 gpu_info.gl_renderer = "GeForce GT 120 OpenGL Engine"; |
| 548 EXPECT_TRUE(entry->Contains( |
| 549 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 550 |
| 551 gpu_info.gl_renderer = "NVIDIA GeForce"; |
| 552 EXPECT_TRUE(entry->Contains( |
| 553 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 554 |
| 555 gpu_info.gl_renderer = "NVIDIA Ge Force"; |
| 556 EXPECT_FALSE(entry->Contains( |
| 557 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 558 } |
| 559 |
| 560 TEST_F(GpuControlListEntryTest, GlRendererCaseInsensitive) { |
| 561 const std::string json = LONG_STRING_CONST( |
| 562 { |
| 563 "id": 1, |
| 564 "gl_renderer": "(?i).*software.*", |
| 565 "features": [ |
| 566 "test_feature_0" |
| 567 ] |
| 568 } |
| 569 ); |
| 570 ScopedEntry entry(GetEntryFromString(json)); |
| 571 EXPECT_TRUE(entry.get() != NULL); |
| 572 |
| 573 GPUInfo gpu_info; |
| 574 gpu_info.gl_renderer = "software rasterizer"; |
| 575 EXPECT_TRUE(entry->Contains( |
| 576 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 577 |
| 578 gpu_info.gl_renderer = "Software Rasterizer"; |
| 579 EXPECT_TRUE(entry->Contains( |
| 580 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 581 } |
| 582 |
| 583 TEST_F(GpuControlListEntryTest, GlExtensionsEndWith) { |
| 584 const std::string json = LONG_STRING_CONST( |
| 585 { |
| 586 "id": 1, |
| 587 "gl_extensions": ".*GL_SUN_slice_accum", |
| 588 "features": [ |
| 589 "test_feature_0" |
| 590 ] |
| 591 } |
| 592 ); |
| 593 ScopedEntry entry(GetEntryFromString(json)); |
| 594 EXPECT_TRUE(entry.get() != NULL); |
| 595 |
| 596 GPUInfo gpu_info; |
| 597 gpu_info.gl_extensions = "GL_SGIS_generate_mipmap " |
| 598 "GL_SGIX_shadow " |
| 599 "GL_SUN_slice_accum"; |
| 600 EXPECT_TRUE(entry->Contains( |
| 601 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 602 |
| 603 gpu_info.gl_extensions = "GL_SGIS_generate_mipmap " |
| 604 "GL_SUN_slice_accum " |
| 605 "GL_SGIX_shadow"; |
| 606 EXPECT_FALSE(entry->Contains( |
| 607 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
525 } | 608 } |
526 | 609 |
527 TEST_F(GpuControlListEntryTest, PerfGraphicsEntry) { | 610 TEST_F(GpuControlListEntryTest, PerfGraphicsEntry) { |
528 const std::string json = LONG_STRING_CONST( | 611 const std::string json = LONG_STRING_CONST( |
529 { | 612 { |
530 "id": 1, | 613 "id": 1, |
531 "perf_graphics": { | 614 "perf_graphics": { |
532 "op": "<", | 615 "op": "<", |
533 "value": "6.0" | 616 "value": "6.0" |
534 }, | 617 }, |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 GPUInfo gpu_info; | 716 GPUInfo gpu_info; |
634 gpu_info.amd_switchable = true; | 717 gpu_info.amd_switchable = true; |
635 | 718 |
636 ScopedEntry entry(GetEntryFromString(json)); | 719 ScopedEntry entry(GetEntryFromString(json)); |
637 EXPECT_TRUE(entry.get() != NULL); | 720 EXPECT_TRUE(entry.get() != NULL); |
638 EXPECT_EQ(GpuControlList::kOsMacosx, entry->GetOsType()); | 721 EXPECT_EQ(GpuControlList::kOsMacosx, entry->GetOsType()); |
639 EXPECT_TRUE(entry->Contains( | 722 EXPECT_TRUE(entry->Contains( |
640 GpuControlList::kOsMacosx, "10.6", gpu_info)); | 723 GpuControlList::kOsMacosx, "10.6", gpu_info)); |
641 } | 724 } |
642 | 725 |
| 726 TEST_F(GpuControlListEntryTest, DriverVendorBeginWith) { |
| 727 const std::string json = LONG_STRING_CONST( |
| 728 { |
| 729 "id": 1, |
| 730 "driver_vendor": "NVIDIA.*", |
| 731 "features": [ |
| 732 "test_feature_0" |
| 733 ] |
| 734 } |
| 735 ); |
| 736 ScopedEntry entry(GetEntryFromString(json)); |
| 737 EXPECT_TRUE(entry.get() != NULL); |
| 738 |
| 739 GPUInfo gpu_info; |
| 740 gpu_info.driver_vendor = "NVIDIA Corporation"; |
| 741 EXPECT_TRUE(entry->Contains( |
| 742 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 743 |
| 744 // Case sensitive. |
| 745 gpu_info.driver_vendor = "NVidia Corporation"; |
| 746 EXPECT_FALSE(entry->Contains( |
| 747 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 748 |
| 749 gpu_info.driver_vendor = "NVIDIA"; |
| 750 EXPECT_TRUE(entry->Contains( |
| 751 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 752 |
| 753 gpu_info.driver_vendor = "USA NVIDIA"; |
| 754 EXPECT_FALSE(entry->Contains( |
| 755 GpuControlList::kOsMacosx, "10.9", gpu_info)); |
| 756 } |
| 757 |
643 TEST_F(GpuControlListEntryTest, LexicalDriverVersionEntry) { | 758 TEST_F(GpuControlListEntryTest, LexicalDriverVersionEntry) { |
644 const std::string json = LONG_STRING_CONST( | 759 const std::string json = LONG_STRING_CONST( |
645 { | 760 { |
646 "id": 1, | 761 "id": 1, |
647 "os": { | 762 "os": { |
648 "type": "linux" | 763 "type": "linux" |
649 }, | 764 }, |
650 "vendor_id": "0x1002", | 765 "vendor_id": "0x1002", |
651 "driver_version": { | 766 "driver_version": { |
652 "op": "=", | 767 "op": "=", |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 EXPECT_FALSE(entry->NeedsMoreInfo(gpu_info)); | 818 EXPECT_FALSE(entry->NeedsMoreInfo(gpu_info)); |
704 } | 819 } |
705 | 820 |
706 TEST_F(GpuControlListEntryTest, NeedsMoreInfoForExceptionsEntry) { | 821 TEST_F(GpuControlListEntryTest, NeedsMoreInfoForExceptionsEntry) { |
707 const std::string json = LONG_STRING_CONST( | 822 const std::string json = LONG_STRING_CONST( |
708 { | 823 { |
709 "id": 1, | 824 "id": 1, |
710 "vendor_id": "0x8086", | 825 "vendor_id": "0x8086", |
711 "exceptions": [ | 826 "exceptions": [ |
712 { | 827 { |
713 "gl_renderer": { | 828 "gl_renderer": ".*mesa.*" |
714 "op": "contains", | |
715 "value": "mesa" | |
716 } | |
717 } | 829 } |
718 ], | 830 ], |
719 "features": [ | 831 "features": [ |
720 "test_feature_1" | 832 "test_feature_1" |
721 ] | 833 ] |
722 } | 834 } |
723 ); | 835 ); |
724 ScopedEntry entry(GetEntryFromString(json)); | 836 ScopedEntry entry(GetEntryFromString(json)); |
725 EXPECT_TRUE(entry.get() != NULL); | 837 EXPECT_TRUE(entry.get() != NULL); |
726 | 838 |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
800 GpuControlList::kOsMacosx, "10.6", gpu_info())); | 912 GpuControlList::kOsMacosx, "10.6", gpu_info())); |
801 } | 913 } |
802 | 914 |
803 TEST_F(GpuControlListEntryTest, MachineModelName) { | 915 TEST_F(GpuControlListEntryTest, MachineModelName) { |
804 const std::string json = LONG_STRING_CONST( | 916 const std::string json = LONG_STRING_CONST( |
805 { | 917 { |
806 "id": 1, | 918 "id": 1, |
807 "os": { | 919 "os": { |
808 "type": "android" | 920 "type": "android" |
809 }, | 921 }, |
810 "machine_model_name": ["Nexus 4", "XT1032"], | 922 "machine_model_name": [ |
| 923 "Nexus 4", "XT1032", "GT-.*", "SCH-.*" |
| 924 ], |
811 "features": [ | 925 "features": [ |
812 "test_feature_0" | 926 "test_feature_0" |
813 ] | 927 ] |
814 } | 928 } |
815 ); | 929 ); |
816 ScopedEntry entry(GetEntryFromString(json)); | 930 ScopedEntry entry(GetEntryFromString(json)); |
817 EXPECT_TRUE(entry.get() != NULL); | 931 EXPECT_TRUE(entry.get() != NULL); |
818 EXPECT_EQ(GpuControlList::kOsAndroid, entry->GetOsType()); | 932 EXPECT_EQ(GpuControlList::kOsAndroid, entry->GetOsType()); |
819 GPUInfo gpu_info; | 933 GPUInfo gpu_info; |
820 | 934 |
(...skipping 13 matching lines...) Expand all Loading... |
834 EXPECT_FALSE(entry->Contains( | 948 EXPECT_FALSE(entry->Contains( |
835 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 949 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
836 | 950 |
837 gpu_info.machine_model_name = "Nexus"; | 951 gpu_info.machine_model_name = "Nexus"; |
838 EXPECT_FALSE(entry->Contains( | 952 EXPECT_FALSE(entry->Contains( |
839 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 953 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
840 | 954 |
841 gpu_info.machine_model_name = ""; | 955 gpu_info.machine_model_name = ""; |
842 EXPECT_FALSE(entry->Contains( | 956 EXPECT_FALSE(entry->Contains( |
843 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 957 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 958 |
| 959 gpu_info.machine_model_name = "GT-N7100"; |
| 960 EXPECT_TRUE(entry->Contains( |
| 961 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 962 |
| 963 gpu_info.machine_model_name = "GT-I9300"; |
| 964 EXPECT_TRUE(entry->Contains( |
| 965 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 966 |
| 967 gpu_info.machine_model_name = "SCH-I545"; |
| 968 EXPECT_TRUE(entry->Contains( |
| 969 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
844 } | 970 } |
845 | 971 |
846 TEST_F(GpuControlListEntryTest, MachineModelNameException) { | 972 TEST_F(GpuControlListEntryTest, MachineModelNameException) { |
847 const std::string json = LONG_STRING_CONST( | 973 const std::string json = LONG_STRING_CONST( |
848 { | 974 { |
849 "id": 1, | 975 "id": 1, |
850 "exceptions": [ | 976 "exceptions": [ |
851 { | 977 { |
852 "os": { | 978 "os": { |
853 "type": "android" | 979 "type": "android" |
854 }, | 980 }, |
855 "machine_model_name": ["Nexus 4"] | 981 "machine_model_name": ["Nexus.*"] |
856 } | 982 } |
857 ], | 983 ], |
858 "features": [ | 984 "features": [ |
859 "test_feature_0" | 985 "test_feature_0" |
860 ] | 986 ] |
861 } | 987 } |
862 ); | 988 ); |
863 ScopedEntry entry(GetEntryFromString(json)); | 989 ScopedEntry entry(GetEntryFromString(json)); |
864 EXPECT_TRUE(entry.get() != NULL); | 990 EXPECT_TRUE(entry.get() != NULL); |
865 EXPECT_EQ(GpuControlList::kOsAny, entry->GetOsType()); | 991 EXPECT_EQ(GpuControlList::kOsAny, entry->GetOsType()); |
866 GPUInfo gpu_info; | 992 GPUInfo gpu_info; |
867 | 993 |
868 gpu_info.machine_model_name = "Nexus 4"; | 994 gpu_info.machine_model_name = "Nexus 4"; |
869 EXPECT_FALSE(entry->Contains( | 995 EXPECT_FALSE(entry->Contains( |
870 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 996 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
871 EXPECT_TRUE(entry->Contains( | 997 EXPECT_TRUE(entry->Contains( |
872 GpuControlList::kOsLinux, "4.1", gpu_info)); | 998 GpuControlList::kOsLinux, "4.1", gpu_info)); |
873 | 999 |
| 1000 gpu_info.machine_model_name = "Nexus 7"; |
| 1001 EXPECT_FALSE(entry->Contains( |
| 1002 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 1003 EXPECT_TRUE(entry->Contains( |
| 1004 GpuControlList::kOsLinux, "4.1", gpu_info)); |
| 1005 |
874 gpu_info.machine_model_name = ""; | 1006 gpu_info.machine_model_name = ""; |
875 EXPECT_TRUE(entry->Contains( | 1007 EXPECT_TRUE(entry->Contains( |
876 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 1008 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
877 EXPECT_TRUE(entry->Contains( | 1009 EXPECT_TRUE(entry->Contains( |
878 GpuControlList::kOsLinux, "4.1", gpu_info)); | 1010 GpuControlList::kOsLinux, "4.1", gpu_info)); |
879 } | 1011 } |
880 | 1012 |
881 TEST_F(GpuControlListEntryTest, MachineModelVersion) { | 1013 TEST_F(GpuControlListEntryTest, MachineModelVersion) { |
882 const std::string json = LONG_STRING_CONST( | 1014 const std::string json = LONG_STRING_CONST( |
883 { | 1015 { |
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1150 ); | 1282 ); |
1151 // By default, secondary GPU is active. | 1283 // By default, secondary GPU is active. |
1152 EntryShouldNotApply(json); | 1284 EntryShouldNotApply(json); |
1153 | 1285 |
1154 ActivatePrimaryGPU(); | 1286 ActivatePrimaryGPU(); |
1155 EntryShouldApply(json); | 1287 EntryShouldApply(json); |
1156 } | 1288 } |
1157 | 1289 |
1158 } // namespace gpu | 1290 } // namespace gpu |
1159 | 1291 |
OLD | NEW |