OLD | NEW |
1 /* | 1 /* |
2 * Loader: | 2 * Loader: |
3 * Reads GM result reports written out by results.py, and imports | 3 * Reads GM result reports written out by results.py, and imports |
4 * them into $scope.extraColumnHeaders and $scope.imagePairs . | 4 * them into $scope.extraColumnHeaders and $scope.imagePairs . |
5 */ | 5 */ |
6 var Loader = angular.module( | 6 var Loader = angular.module( |
7 'Loader', | 7 'Loader', |
8 ['ConstantsModule'] | 8 ['ConstantsModule'] |
9 ); | 9 ); |
10 | 10 |
(...skipping 758 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
769 | 769 |
770 | 770 |
771 // | 771 // |
772 // Operations for sending info back to the server. | 772 // Operations for sending info back to the server. |
773 // | 773 // |
774 | 774 |
775 /** | 775 /** |
776 * Tell the server that the actual results of these particular tests | 776 * Tell the server that the actual results of these particular tests |
777 * are acceptable. | 777 * are acceptable. |
778 * | 778 * |
779 * TODO(epoger): This assumes that the original expectations are in | 779 * This assumes that the original expectations are in imageSetA, and the |
780 * imageSetA, and the actuals are in imageSetB. | 780 * new expectations are in imageSetB. That's fine, because the server |
| 781 * mandates that anyway (it will swap the sets if the user requests them |
| 782 * in the opposite order). |
781 * | 783 * |
782 * @param imagePairsSubset an array of test results, most likely a subset of | 784 * @param imagePairsSubset an array of test results, most likely a subset of |
783 * $scope.imagePairs (perhaps with some modifications) | 785 * $scope.imagePairs (perhaps with some modifications) |
784 */ | 786 */ |
785 $scope.submitApprovals = function(imagePairsSubset) { | 787 $scope.submitApprovals = function(imagePairsSubset) { |
786 $scope.submitPending = true; | 788 $scope.submitPending = true; |
| 789 $scope.diffResults = ""; |
787 | 790 |
788 // Convert bug text field to null or 1-item array. | 791 // Convert bug text field to null or 1-item array. |
789 var bugs = null; | 792 var bugs = null; |
790 var bugNumber = parseInt($scope.submitAdvancedSettings['bug']); | 793 var bugNumber = parseInt($scope.submitAdvancedSettings['bug']); |
791 if (!isNaN(bugNumber)) { | 794 if (!isNaN(bugNumber)) { |
792 bugs = [bugNumber]; | 795 bugs = [bugNumber]; |
793 } | 796 } |
794 | 797 |
795 // TODO(epoger): This is a suboptimal way to prevent users from | |
796 // rebaselining failures in alternative renderModes, but it does work. | |
797 // For a better solution, see | |
798 // https://code.google.com/p/skia/issues/detail?id=1748 ('gm: add new | |
799 // result type, RenderModeMismatch') | |
800 var encounteredComparisonConfig = false; | |
801 | |
802 var updatedExpectations = []; | 798 var updatedExpectations = []; |
803 for (var i = 0; i < imagePairsSubset.length; i++) { | 799 for (var i = 0; i < imagePairsSubset.length; i++) { |
804 var imagePair = imagePairsSubset[i]; | 800 var imagePair = imagePairsSubset[i]; |
805 var updatedExpectation = {}; | 801 var updatedExpectation = {}; |
806 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = | 802 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = |
807 imagePair[constants.KEY__IMAGEPAIRS__EXPECTATIONS]; | 803 imagePair[constants.KEY__IMAGEPAIRS__EXPECTATIONS]; |
808 updatedExpectation[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS] = | 804 updatedExpectation[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS] = |
809 imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS]; | 805 imagePair[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS]; |
| 806 updatedExpectation[constants.KEY__IMAGEPAIRS__SOURCE_JSON_FILE] = |
| 807 imagePair[constants.KEY__IMAGEPAIRS__SOURCE_JSON_FILE]; |
810 // IMAGE_B_URL contains the actual image (which is now the expectation) | 808 // IMAGE_B_URL contains the actual image (which is now the expectation) |
811 updatedExpectation[constants.KEY__IMAGEPAIRS__IMAGE_B_URL] = | 809 updatedExpectation[constants.KEY__IMAGEPAIRS__IMAGE_B_URL] = |
812 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; | 810 imagePair[constants.KEY__IMAGEPAIRS__IMAGE_B_URL]; |
813 if (0 == updatedExpectation[constants.KEY__IMAGEPAIRS__EXTRACOLUMNS] | |
814 [constants.KEY__EXTRACOLUMNS__CONFIG] | |
815 .indexOf('comparison-')) { | |
816 encounteredComparisonConfig = true; | |
817 } | |
818 | 811 |
819 // Advanced settings... | 812 // Advanced settings... |
820 if (null == updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS])
{ | 813 if (null == updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS])
{ |
821 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = {}; | 814 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] = {}; |
822 } | 815 } |
823 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] | 816 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
824 [constants.KEY__EXPECTATIONS__REVIEWED] = | 817 [constants.KEY__EXPECTATIONS__REVIEWED] = |
825 $scope.submitAdvancedSettings[ | 818 $scope.submitAdvancedSettings[ |
826 constants.KEY__EXPECTATIONS__REVIEWED]; | 819 constants.KEY__EXPECTATIONS__REVIEWED]; |
827 if (true == $scope.submitAdvancedSettings[ | 820 if (true == $scope.submitAdvancedSettings[ |
828 constants.KEY__EXPECTATIONS__IGNOREFAILURE]) { | 821 constants.KEY__EXPECTATIONS__IGNOREFAILURE]) { |
829 // if it's false, don't send it at all (just keep the default) | 822 // if it's false, don't send it at all (just keep the default) |
830 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] | 823 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
831 [constants.KEY__EXPECTATIONS__IGNOREFAILURE] = true; | 824 [constants.KEY__EXPECTATIONS__IGNOREFAILURE] = true; |
832 } | 825 } |
833 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] | 826 updatedExpectation[constants.KEY__IMAGEPAIRS__EXPECTATIONS] |
834 [constants.KEY__EXPECTATIONS__BUGS] = bugs; | 827 [constants.KEY__EXPECTATIONS__BUGS] = bugs; |
835 | 828 |
836 updatedExpectations.push(updatedExpectation); | 829 updatedExpectations.push(updatedExpectation); |
837 } | 830 } |
838 if (encounteredComparisonConfig) { | |
839 alert("Approval failed -- you cannot approve results with config " + | |
840 "type comparison-*"); | |
841 $scope.submitPending = false; | |
842 return; | |
843 } | |
844 var modificationData = {}; | 831 var modificationData = {}; |
845 modificationData[constants.KEY__EDITS__MODIFICATIONS] = | 832 modificationData[constants.KEY__LIVE_EDITS__MODIFICATIONS] = |
846 updatedExpectations; | 833 updatedExpectations; |
847 modificationData[constants.KEY__EDITS__OLD_RESULTS_HASH] = | 834 modificationData[constants.KEY__LIVE_EDITS__SET_A_DESCRIPTIONS] = |
848 $scope.header[constants.KEY__HEADER__DATAHASH]; | 835 $scope.header[constants.KEY__HEADER__SET_A_DESCRIPTIONS]; |
849 modificationData[constants.KEY__EDITS__OLD_RESULTS_TYPE] = | 836 modificationData[constants.KEY__LIVE_EDITS__SET_B_DESCRIPTIONS] = |
850 $scope.header[constants.KEY__HEADER__TYPE]; | 837 $scope.header[constants.KEY__HEADER__SET_B_DESCRIPTIONS]; |
851 $http({ | 838 $http({ |
852 method: "POST", | 839 method: "POST", |
853 url: "/edits", | 840 url: "/live-edits", |
854 data: modificationData | 841 data: modificationData |
855 }).success(function(data, status, headers, config) { | 842 }).success(function(data, status, headers, config) { |
856 var imagePairIndicesToMove = []; | 843 $scope.diffResults = data; |
857 for (var i = 0; i < imagePairsSubset.length; i++) { | 844 $scope.submitPending = false; |
858 imagePairIndicesToMove.push(imagePairsSubset[i].index); | |
859 } | |
860 $scope.moveImagePairsToTab(imagePairIndicesToMove, | |
861 "HackToMakeSureThisImagePairDisappears"); | |
862 $scope.updateResults(); | |
863 alert("New baselines submitted successfully!\n\n" + | |
864 "You still need to commit the updated expectations files on " + | |
865 "the server side to the Skia repo.\n\n" + | |
866 "When you click OK, your web UI will reload; after that " + | |
867 "completes, you will see the updated data (once the server has " + | |
868 "finished loading the update results into memory!) and you can " + | |
869 "submit more baselines if you want."); | |
870 // I don't know why, but if I just call reload() here it doesn't work. | |
871 // Making a timer call it fixes the problem. | |
872 $timeout(function(){location.reload();}, 1); | |
873 }).error(function(data, status, headers, config) { | 845 }).error(function(data, status, headers, config) { |
874 alert("There was an error submitting your baselines.\n\n" + | 846 alert("There was an error submitting your baselines.\n\n" + |
875 "Please see server-side log for details."); | 847 "Please see server-side log for details."); |
876 $scope.submitPending = false; | 848 $scope.submitPending = false; |
877 }); | 849 }); |
878 }; | 850 }; |
879 | 851 |
880 | 852 |
881 // | 853 // |
882 // Operations we use to mimic Set semantics, in such a way that | 854 // Operations we use to mimic Set semantics, in such a way that |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1035 * | 1007 * |
1036 * TODO(epoger): It might be nice to tint the color when it's not completely | 1008 * TODO(epoger): It might be nice to tint the color when it's not completely |
1037 * black or completely white. | 1009 * black or completely white. |
1038 */ | 1010 */ |
1039 $scope.brightnessStringToHexColor = function(brightnessString) { | 1011 $scope.brightnessStringToHexColor = function(brightnessString) { |
1040 var v = parseInt(brightnessString); | 1012 var v = parseInt(brightnessString); |
1041 return $scope.hexColorString(v, v, v); | 1013 return $scope.hexColorString(v, v, v); |
1042 }; | 1014 }; |
1043 } | 1015 } |
1044 ); | 1016 ); |
OLD | NEW |