diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-11 03:08:58 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-11 03:08:58 +0300 |
commit | 5427433c6d79f9131f4025cabb7e3208380bce9a (patch) | |
tree | ea0a22450f467f1ef1e3449255017dbe0f178882 /app/assets/javascripts/diffs | |
parent | 13bcb8221306526671a61df589f7c05505c9934c (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/diffs')
-rw-r--r-- | app/assets/javascripts/diffs/components/app.vue | 12 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/components/diff_file.vue | 37 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/constants.js | 5 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/store/actions.js | 19 | ||||
-rw-r--r-- | app/assets/javascripts/diffs/utils/performance.js | 80 |
5 files changed, 145 insertions, 8 deletions
diff --git a/app/assets/javascripts/diffs/components/app.vue b/app/assets/javascripts/diffs/components/app.vue index a800cc8edc8..9d8d184a3f6 100644 --- a/app/assets/javascripts/diffs/components/app.vue +++ b/app/assets/javascripts/diffs/components/app.vue @@ -20,6 +20,8 @@ import HiddenFilesWarning from './hidden_files_warning.vue'; import MergeConflictWarning from './merge_conflict_warning.vue'; import CollapsedFilesWarning from './collapsed_files_warning.vue'; +import { diffsApp } from '../utils/performance'; + import { TREE_LIST_WIDTH_STORAGE_KEY, INITIAL_TREE_WIDTH, @@ -272,8 +274,12 @@ export default { ); } }, + beforeCreate() { + diffsApp.instrument(); + }, created() { this.adjustView(); + eventHub.$once('fetchDiffData', this.fetchData); eventHub.$on('refetchDiffData', this.refetchDiffData); this.CENTERED_LIMITED_CONTAINER_CLASSES = CENTERED_LIMITED_CONTAINER_CLASSES; @@ -294,6 +300,8 @@ export default { ); }, beforeDestroy() { + diffsApp.deinstrument(); + eventHub.$off('fetchDiffData', this.fetchData); eventHub.$off('refetchDiffData', this.refetchDiffData); this.removeEventListeners(); @@ -487,9 +495,11 @@ export default { <div v-if="isBatchLoading" class="loading"><gl-loading-icon size="lg" /></div> <template v-else-if="renderDiffFiles"> <diff-file - v-for="file in diffs" + v-for="(file, index) in diffs" :key="file.newPath" :file="file" + :is-first-file="index === 0" + :is-last-file="index === diffs.length - 1" :help-page-path="helpPagePath" :can-current-user-fork="canCurrentUserFork" :view-diffs-file-by-file="viewDiffsFileByFile" diff --git a/app/assets/javascripts/diffs/components/diff_file.vue b/app/assets/javascripts/diffs/components/diff_file.vue index 27bda194c5c..59bd2d90158 100644 --- a/app/assets/javascripts/diffs/components/diff_file.vue +++ b/app/assets/javascripts/diffs/components/diff_file.vue @@ -15,6 +15,8 @@ import { DIFF_FILE_AUTOMATIC_COLLAPSE, DIFF_FILE_MANUAL_COLLAPSE, EVT_EXPAND_ALL_FILES, + EVT_PERF_MARK_DIFF_FILES_END, + EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN, } from '../constants'; import { DIFF_FILE, GENERIC_ERROR } from '../i18n'; import eventHub from '../event_hub'; @@ -35,6 +37,16 @@ export default { type: Object, required: true, }, + isFirstFile: { + type: Boolean, + required: false, + default: false, + }, + isLastFile: { + type: Boolean, + required: false, + default: false, + }, canCurrentUserFork: { type: Boolean, required: true, @@ -160,6 +172,11 @@ export default { notesEventHub.$on(`loadCollapsedDiff/${this.file.file_hash}`, this.requestDiff); eventHub.$on(EVT_EXPAND_ALL_FILES, this.expandAllListener); }, + async mounted() { + if (this.hasDiff) { + await this.postRender(); + } + }, beforeDestroy() { eventHub.$off(EVT_EXPAND_ALL_FILES, this.expandAllListener); }, @@ -175,6 +192,23 @@ export default { this.handleToggle(); } }, + async postRender() { + const eventsForThisFile = []; + + if (this.isFirstFile) { + eventsForThisFile.push(EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN); + } + + if (this.isLastFile) { + eventsForThisFile.push(EVT_PERF_MARK_DIFF_FILES_END); + } + + await this.$nextTick(); + + eventsForThisFile.forEach(event => { + eventHub.$emit(event); + }); + }, handleToggle() { const currentCollapsedFlag = this.isCollapsed; @@ -197,7 +231,8 @@ export default { }) .then(() => { requestIdleCallback( - () => { + async () => { + await this.postRender(); this.assignDiscussionsToDiff(this.getDiffFileDiscussions(this.file)); }, { timeout: 1000 }, diff --git a/app/assets/javascripts/diffs/constants.js b/app/assets/javascripts/diffs/constants.js index 709bfe693e6..79f8c08e389 100644 --- a/app/assets/javascripts/diffs/constants.js +++ b/app/assets/javascripts/diffs/constants.js @@ -98,3 +98,8 @@ export const RENAMED_DIFF_TRANSITIONS = { // MR Diffs known events export const EVT_EXPAND_ALL_FILES = 'mr:diffs:expandAllFiles'; +export const EVT_PERF_MARK_FILE_TREE_START = 'mr:diffs:perf:fileTreeStart'; +export const EVT_PERF_MARK_FILE_TREE_END = 'mr:diffs:perf:fileTreeEnd'; +export const EVT_PERF_MARK_DIFF_FILES_START = 'mr:diffs:perf:filesStart'; +export const EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN = 'mr:diffs:perf:firstFileShown'; +export const EVT_PERF_MARK_DIFF_FILES_END = 'mr:diffs:perf:filesEnd'; diff --git a/app/assets/javascripts/diffs/store/actions.js b/app/assets/javascripts/diffs/store/actions.js index 5a3d836a158..72b99ca8486 100644 --- a/app/assets/javascripts/diffs/store/actions.js +++ b/app/assets/javascripts/diffs/store/actions.js @@ -8,7 +8,8 @@ import { __, s__ } from '~/locale'; import { handleLocationHash, historyPushState, scrollToElement } from '~/lib/utils/common_utils'; import { mergeUrlParams, getLocationHash } from '~/lib/utils/url_utility'; import TreeWorker from '../workers/tree_worker'; -import eventHub from '../../notes/event_hub'; +import notesEventHub from '../../notes/event_hub'; +import eventHub from '../event_hub'; import { getDiffPositionByLineCode, getNoteFormData, @@ -42,6 +43,9 @@ import { NO_SHOW_WHITESPACE, DIFF_FILE_MANUAL_COLLAPSE, DIFF_FILE_AUTOMATIC_COLLAPSE, + EVT_PERF_MARK_FILE_TREE_START, + EVT_PERF_MARK_FILE_TREE_END, + EVT_PERF_MARK_DIFF_FILES_START, } from '../constants'; import { diffViewerModes } from '~/ide/constants'; import { isCollapsed } from '../diff_file'; @@ -78,6 +82,7 @@ export const fetchDiffFilesBatch = ({ commit, state, dispatch }) => { commit(types.SET_BATCH_LOADING, true); commit(types.SET_RETRIEVING_BATCHES, true); + eventHub.$emit(EVT_PERF_MARK_DIFF_FILES_START); const getBatch = (page = 1) => axios @@ -139,9 +144,11 @@ export const fetchDiffFilesMeta = ({ commit, state }) => { }; commit(types.SET_LOADING, true); + eventHub.$emit(EVT_PERF_MARK_FILE_TREE_START); worker.addEventListener('message', ({ data }) => { commit(types.SET_TREE_DATA, data); + eventHub.$emit(EVT_PERF_MARK_FILE_TREE_END); worker.terminate(); }); @@ -215,7 +222,7 @@ export const assignDiscussionsToDiff = ( } Vue.nextTick(() => { - eventHub.$emit('scrollToDiscussion'); + notesEventHub.$emit('scrollToDiscussion'); }); }; @@ -240,7 +247,7 @@ export const renderFileForDiscussionId = ({ commit, rootState, state }, discussi } if (file.viewer.automaticallyCollapsed) { - eventHub.$emit(`loadCollapsedDiff/${file.file_hash}`); + notesEventHub.$emit(`loadCollapsedDiff/${file.file_hash}`); scrollToElement(document.getElementById(file.file_hash)); } else if (file.viewer.manuallyCollapsed) { commit(types.SET_FILE_COLLAPSED, { @@ -248,9 +255,9 @@ export const renderFileForDiscussionId = ({ commit, rootState, state }, discussi collapsed: false, trigger: DIFF_FILE_AUTOMATIC_COLLAPSE, }); - eventHub.$emit('scrollToDiscussion'); + notesEventHub.$emit('scrollToDiscussion'); } else { - eventHub.$emit('scrollToDiscussion'); + notesEventHub.$emit('scrollToDiscussion'); } } } @@ -485,7 +492,7 @@ export const setShowWhitespace = ({ commit }, { showWhitespace, pushState = fals historyPushState(mergeUrlParams({ w }, window.location.href)); } - eventHub.$emit('refetchDiffData'); + notesEventHub.$emit('refetchDiffData'); }; export const toggleFileFinder = ({ commit }, visible) => { diff --git a/app/assets/javascripts/diffs/utils/performance.js b/app/assets/javascripts/diffs/utils/performance.js new file mode 100644 index 00000000000..dcde6f4ecc4 --- /dev/null +++ b/app/assets/javascripts/diffs/utils/performance.js @@ -0,0 +1,80 @@ +import { performanceMarkAndMeasure } from '~/performance/utils'; +import { + MR_DIFFS_MARK_FILE_TREE_START, + MR_DIFFS_MARK_FILE_TREE_END, + MR_DIFFS_MARK_DIFF_FILES_START, + MR_DIFFS_MARK_FIRST_DIFF_FILE_SHOWN, + MR_DIFFS_MARK_DIFF_FILES_END, + MR_DIFFS_MEASURE_FILE_TREE_DONE, + MR_DIFFS_MEASURE_DIFF_FILES_DONE, +} from '../../performance/constants'; + +import eventHub from '../event_hub'; +import { + EVT_PERF_MARK_FILE_TREE_START, + EVT_PERF_MARK_FILE_TREE_END, + EVT_PERF_MARK_DIFF_FILES_START, + EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN, + EVT_PERF_MARK_DIFF_FILES_END, +} from '../constants'; + +function treeStart() { + performanceMarkAndMeasure({ + mark: MR_DIFFS_MARK_FILE_TREE_START, + }); +} + +function treeEnd() { + performanceMarkAndMeasure({ + mark: MR_DIFFS_MARK_FILE_TREE_END, + measures: [ + { + name: MR_DIFFS_MEASURE_FILE_TREE_DONE, + start: MR_DIFFS_MARK_FILE_TREE_START, + end: MR_DIFFS_MARK_FILE_TREE_END, + }, + ], + }); +} + +function filesStart() { + performanceMarkAndMeasure({ + mark: MR_DIFFS_MARK_DIFF_FILES_START, + }); +} + +function filesEnd() { + performanceMarkAndMeasure({ + mark: MR_DIFFS_MARK_DIFF_FILES_END, + measures: [ + { + name: MR_DIFFS_MEASURE_DIFF_FILES_DONE, + start: MR_DIFFS_MARK_DIFF_FILES_START, + end: MR_DIFFS_MARK_DIFF_FILES_END, + }, + ], + }); +} + +function firstFile() { + performanceMarkAndMeasure({ + mark: MR_DIFFS_MARK_FIRST_DIFF_FILE_SHOWN, + }); +} + +export const diffsApp = { + instrument() { + eventHub.$on(EVT_PERF_MARK_FILE_TREE_START, treeStart); + eventHub.$on(EVT_PERF_MARK_FILE_TREE_END, treeEnd); + eventHub.$on(EVT_PERF_MARK_DIFF_FILES_START, filesStart); + eventHub.$on(EVT_PERF_MARK_DIFF_FILES_END, filesEnd); + eventHub.$on(EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN, firstFile); + }, + deinstrument() { + eventHub.$off(EVT_PERF_MARK_FIRST_DIFF_FILE_SHOWN, firstFile); + eventHub.$off(EVT_PERF_MARK_DIFF_FILES_END, filesEnd); + eventHub.$off(EVT_PERF_MARK_DIFF_FILES_START, filesStart); + eventHub.$off(EVT_PERF_MARK_FILE_TREE_END, treeEnd); + eventHub.$off(EVT_PERF_MARK_FILE_TREE_START, treeStart); + }, +}; |