| 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, GlVendorEqual) { | 473 TEST_F(GpuControlListEntryTest, GlVendorEntry) { |
| 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": "NVIDIA", | 477 "gl_vendor": { |
| 478 "op": "beginwith", |
| 479 "value": "NVIDIA" |
| 480 }, |
| 478 "features": [ | 481 "features": [ |
| 479 "test_feature_0" | 482 "test_feature_0" |
| 480 ] | 483 ] |
| 481 } | 484 } |
| 482 ); | 485 ); |
| 483 ScopedEntry entry(GetEntryFromString(json)); | 486 ScopedEntry entry(GetEntryFromString(json)); |
| 484 EXPECT_TRUE(entry.get() != NULL); | 487 EXPECT_TRUE(entry.get() != NULL); |
| 485 | 488 |
| 486 GPUInfo gpu_info; | 489 const GpuControlList::OsType os_type[] = { |
| 487 gpu_info.gl_vendor = "NVIDIA"; | 490 GpuControlList::kOsMacosx, |
| 488 EXPECT_TRUE(entry->Contains( | 491 GpuControlList::kOsWin, |
| 489 GpuControlList::kOsMacosx, "10.9", gpu_info)); | 492 GpuControlList::kOsLinux, |
| 490 | 493 GpuControlList::kOsChromeOS, |
| 491 // Case sensitive. | 494 GpuControlList::kOsAndroid |
| 492 gpu_info.gl_vendor = "NVidia"; | 495 }; |
| 493 EXPECT_FALSE(entry->Contains( | 496 for (size_t i = 0; i < arraysize(os_type); ++i) |
| 494 GpuControlList::kOsMacosx, "10.9", gpu_info)); | 497 EXPECT_TRUE(entry->Contains(os_type[i], "10.6", gpu_info())); |
| 495 | |
| 496 gpu_info.gl_vendor = "NVIDIA-x"; | |
| 497 EXPECT_FALSE(entry->Contains( | |
| 498 GpuControlList::kOsMacosx, "10.9", gpu_info)); | |
| 499 } | 498 } |
| 500 | 499 |
| 501 TEST_F(GpuControlListEntryTest, GlVendorWithDot) { | 500 TEST_F(GpuControlListEntryTest, GlRendererEntry) { |
| 502 const std::string json = LONG_STRING_CONST( | 501 const std::string json = LONG_STRING_CONST( |
| 503 { | 502 { |
| 504 "id": 1, | 503 "id": 1, |
| 505 "gl_vendor": "X\\.Org.*", | 504 "gl_renderer": { |
| 505 "op": "contains", |
| 506 "value": "GeForce" |
| 507 }, |
| 506 "features": [ | 508 "features": [ |
| 507 "test_feature_0" | 509 "test_feature_0" |
| 508 ] | 510 ] |
| 509 } | 511 } |
| 510 ); | 512 ); |
| 511 ScopedEntry entry(GetEntryFromString(json)); | 513 ScopedEntry entry(GetEntryFromString(json)); |
| 512 EXPECT_TRUE(entry.get() != NULL); | 514 EXPECT_TRUE(entry.get() != NULL); |
| 513 | 515 |
| 514 GPUInfo gpu_info; | 516 const GpuControlList::OsType os_type[] = { |
| 515 gpu_info.gl_vendor = "X.Org R300 Project"; | 517 GpuControlList::kOsMacosx, |
| 516 EXPECT_TRUE(entry->Contains( | 518 GpuControlList::kOsWin, |
| 517 GpuControlList::kOsLinux, "", gpu_info)); | 519 GpuControlList::kOsLinux, |
| 518 | 520 GpuControlList::kOsChromeOS, |
| 519 gpu_info.gl_vendor = "X.Org"; | 521 GpuControlList::kOsAndroid |
| 520 EXPECT_TRUE(entry->Contains( | 522 }; |
| 521 GpuControlList::kOsLinux, "", gpu_info)); | 523 for (size_t i = 0; i < arraysize(os_type); ++i) |
| 522 } | 524 EXPECT_TRUE(entry->Contains(os_type[i], "10.6", gpu_info())); |
| 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)); | |
| 608 } | 525 } |
| 609 | 526 |
| 610 TEST_F(GpuControlListEntryTest, PerfGraphicsEntry) { | 527 TEST_F(GpuControlListEntryTest, PerfGraphicsEntry) { |
| 611 const std::string json = LONG_STRING_CONST( | 528 const std::string json = LONG_STRING_CONST( |
| 612 { | 529 { |
| 613 "id": 1, | 530 "id": 1, |
| 614 "perf_graphics": { | 531 "perf_graphics": { |
| 615 "op": "<", | 532 "op": "<", |
| 616 "value": "6.0" | 533 "value": "6.0" |
| 617 }, | 534 }, |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 716 GPUInfo gpu_info; | 633 GPUInfo gpu_info; |
| 717 gpu_info.amd_switchable = true; | 634 gpu_info.amd_switchable = true; |
| 718 | 635 |
| 719 ScopedEntry entry(GetEntryFromString(json)); | 636 ScopedEntry entry(GetEntryFromString(json)); |
| 720 EXPECT_TRUE(entry.get() != NULL); | 637 EXPECT_TRUE(entry.get() != NULL); |
| 721 EXPECT_EQ(GpuControlList::kOsMacosx, entry->GetOsType()); | 638 EXPECT_EQ(GpuControlList::kOsMacosx, entry->GetOsType()); |
| 722 EXPECT_TRUE(entry->Contains( | 639 EXPECT_TRUE(entry->Contains( |
| 723 GpuControlList::kOsMacosx, "10.6", gpu_info)); | 640 GpuControlList::kOsMacosx, "10.6", gpu_info)); |
| 724 } | 641 } |
| 725 | 642 |
| 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 | |
| 758 TEST_F(GpuControlListEntryTest, LexicalDriverVersionEntry) { | 643 TEST_F(GpuControlListEntryTest, LexicalDriverVersionEntry) { |
| 759 const std::string json = LONG_STRING_CONST( | 644 const std::string json = LONG_STRING_CONST( |
| 760 { | 645 { |
| 761 "id": 1, | 646 "id": 1, |
| 762 "os": { | 647 "os": { |
| 763 "type": "linux" | 648 "type": "linux" |
| 764 }, | 649 }, |
| 765 "vendor_id": "0x1002", | 650 "vendor_id": "0x1002", |
| 766 "driver_version": { | 651 "driver_version": { |
| 767 "op": "=", | 652 "op": "=", |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 EXPECT_FALSE(entry->NeedsMoreInfo(gpu_info)); | 703 EXPECT_FALSE(entry->NeedsMoreInfo(gpu_info)); |
| 819 } | 704 } |
| 820 | 705 |
| 821 TEST_F(GpuControlListEntryTest, NeedsMoreInfoForExceptionsEntry) { | 706 TEST_F(GpuControlListEntryTest, NeedsMoreInfoForExceptionsEntry) { |
| 822 const std::string json = LONG_STRING_CONST( | 707 const std::string json = LONG_STRING_CONST( |
| 823 { | 708 { |
| 824 "id": 1, | 709 "id": 1, |
| 825 "vendor_id": "0x8086", | 710 "vendor_id": "0x8086", |
| 826 "exceptions": [ | 711 "exceptions": [ |
| 827 { | 712 { |
| 828 "gl_renderer": ".*mesa.*" | 713 "gl_renderer": { |
| 714 "op": "contains", |
| 715 "value": "mesa" |
| 716 } |
| 829 } | 717 } |
| 830 ], | 718 ], |
| 831 "features": [ | 719 "features": [ |
| 832 "test_feature_1" | 720 "test_feature_1" |
| 833 ] | 721 ] |
| 834 } | 722 } |
| 835 ); | 723 ); |
| 836 ScopedEntry entry(GetEntryFromString(json)); | 724 ScopedEntry entry(GetEntryFromString(json)); |
| 837 EXPECT_TRUE(entry.get() != NULL); | 725 EXPECT_TRUE(entry.get() != NULL); |
| 838 | 726 |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 GpuControlList::kOsMacosx, "10.6", gpu_info())); | 800 GpuControlList::kOsMacosx, "10.6", gpu_info())); |
| 913 } | 801 } |
| 914 | 802 |
| 915 TEST_F(GpuControlListEntryTest, MachineModelName) { | 803 TEST_F(GpuControlListEntryTest, MachineModelName) { |
| 916 const std::string json = LONG_STRING_CONST( | 804 const std::string json = LONG_STRING_CONST( |
| 917 { | 805 { |
| 918 "id": 1, | 806 "id": 1, |
| 919 "os": { | 807 "os": { |
| 920 "type": "android" | 808 "type": "android" |
| 921 }, | 809 }, |
| 922 "machine_model_name": [ | 810 "machine_model_name": ["Nexus 4", "XT1032"], |
| 923 "Nexus 4", "XT1032", "GT-.*", "SCH-.*" | |
| 924 ], | |
| 925 "features": [ | 811 "features": [ |
| 926 "test_feature_0" | 812 "test_feature_0" |
| 927 ] | 813 ] |
| 928 } | 814 } |
| 929 ); | 815 ); |
| 930 ScopedEntry entry(GetEntryFromString(json)); | 816 ScopedEntry entry(GetEntryFromString(json)); |
| 931 EXPECT_TRUE(entry.get() != NULL); | 817 EXPECT_TRUE(entry.get() != NULL); |
| 932 EXPECT_EQ(GpuControlList::kOsAndroid, entry->GetOsType()); | 818 EXPECT_EQ(GpuControlList::kOsAndroid, entry->GetOsType()); |
| 933 GPUInfo gpu_info; | 819 GPUInfo gpu_info; |
| 934 | 820 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 948 EXPECT_FALSE(entry->Contains( | 834 EXPECT_FALSE(entry->Contains( |
| 949 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 835 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 950 | 836 |
| 951 gpu_info.machine_model_name = "Nexus"; | 837 gpu_info.machine_model_name = "Nexus"; |
| 952 EXPECT_FALSE(entry->Contains( | 838 EXPECT_FALSE(entry->Contains( |
| 953 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 839 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 954 | 840 |
| 955 gpu_info.machine_model_name = ""; | 841 gpu_info.machine_model_name = ""; |
| 956 EXPECT_FALSE(entry->Contains( | 842 EXPECT_FALSE(entry->Contains( |
| 957 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 843 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)); | |
| 970 } | 844 } |
| 971 | 845 |
| 972 TEST_F(GpuControlListEntryTest, MachineModelNameException) { | 846 TEST_F(GpuControlListEntryTest, MachineModelNameException) { |
| 973 const std::string json = LONG_STRING_CONST( | 847 const std::string json = LONG_STRING_CONST( |
| 974 { | 848 { |
| 975 "id": 1, | 849 "id": 1, |
| 976 "exceptions": [ | 850 "exceptions": [ |
| 977 { | 851 { |
| 978 "os": { | 852 "os": { |
| 979 "type": "android" | 853 "type": "android" |
| 980 }, | 854 }, |
| 981 "machine_model_name": ["Nexus.*"] | 855 "machine_model_name": ["Nexus 4"] |
| 982 } | 856 } |
| 983 ], | 857 ], |
| 984 "features": [ | 858 "features": [ |
| 985 "test_feature_0" | 859 "test_feature_0" |
| 986 ] | 860 ] |
| 987 } | 861 } |
| 988 ); | 862 ); |
| 989 ScopedEntry entry(GetEntryFromString(json)); | 863 ScopedEntry entry(GetEntryFromString(json)); |
| 990 EXPECT_TRUE(entry.get() != NULL); | 864 EXPECT_TRUE(entry.get() != NULL); |
| 991 EXPECT_EQ(GpuControlList::kOsAny, entry->GetOsType()); | 865 EXPECT_EQ(GpuControlList::kOsAny, entry->GetOsType()); |
| 992 GPUInfo gpu_info; | 866 GPUInfo gpu_info; |
| 993 | 867 |
| 994 gpu_info.machine_model_name = "Nexus 4"; | 868 gpu_info.machine_model_name = "Nexus 4"; |
| 995 EXPECT_FALSE(entry->Contains( | 869 EXPECT_FALSE(entry->Contains( |
| 996 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 870 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 997 EXPECT_TRUE(entry->Contains( | 871 EXPECT_TRUE(entry->Contains( |
| 998 GpuControlList::kOsLinux, "4.1", gpu_info)); | 872 GpuControlList::kOsLinux, "4.1", gpu_info)); |
| 999 | 873 |
| 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 | |
| 1006 gpu_info.machine_model_name = ""; | 874 gpu_info.machine_model_name = ""; |
| 1007 EXPECT_TRUE(entry->Contains( | 875 EXPECT_TRUE(entry->Contains( |
| 1008 GpuControlList::kOsAndroid, "4.1", gpu_info)); | 876 GpuControlList::kOsAndroid, "4.1", gpu_info)); |
| 1009 EXPECT_TRUE(entry->Contains( | 877 EXPECT_TRUE(entry->Contains( |
| 1010 GpuControlList::kOsLinux, "4.1", gpu_info)); | 878 GpuControlList::kOsLinux, "4.1", gpu_info)); |
| 1011 } | 879 } |
| 1012 | 880 |
| 1013 TEST_F(GpuControlListEntryTest, MachineModelVersion) { | 881 TEST_F(GpuControlListEntryTest, MachineModelVersion) { |
| 1014 const std::string json = LONG_STRING_CONST( | 882 const std::string json = LONG_STRING_CONST( |
| 1015 { | 883 { |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1282 ); | 1150 ); |
| 1283 // By default, secondary GPU is active. | 1151 // By default, secondary GPU is active. |
| 1284 EntryShouldNotApply(json); | 1152 EntryShouldNotApply(json); |
| 1285 | 1153 |
| 1286 ActivatePrimaryGPU(); | 1154 ActivatePrimaryGPU(); |
| 1287 EntryShouldApply(json); | 1155 EntryShouldApply(json); |
| 1288 } | 1156 } |
| 1289 | 1157 |
| 1290 } // namespace gpu | 1158 } // namespace gpu |
| 1291 | 1159 |
| OLD | NEW |