From 28a15545266b45fa01d39d6a8e0e041fe6f8e51d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20K=C3=A4semann?= Date: Thu, 5 Jul 2018 13:55:59 +0200 Subject: [PATCH 1/4] Limit Progress Indicator Updates Fixed an issue with the progress indicator updates, where updates of the progress indicator would flush the message queue of SAP GUI and cause a GUI crash or hang. The problem is described in SAP note #2084109 and seems to occur for large repositories (especially after installing SAP GUI 7.50 PL6) --- src/utils/zcl_abapgit_progress.clas.abap | 32 +++++++++++++++++++----- src/utils/zcl_abapgit_progress.clas.xml | 14 +++++++++++ 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/src/utils/zcl_abapgit_progress.clas.abap b/src/utils/zcl_abapgit_progress.clas.abap index e48c52249..5b55e9b3d 100644 --- a/src/utils/zcl_abapgit_progress.clas.abap +++ b/src/utils/zcl_abapgit_progress.clas.abap @@ -21,7 +21,10 @@ CLASS zcl_abapgit_progress DEFINITION !iv_current TYPE i RETURNING VALUE(rv_pct) TYPE i . - PRIVATE SECTION. +private section. + + data MV_CV_TIME_NEXT type SY-UZEIT . + data MV_CV_DATUM_NEXT type SY-DATUM . ENDCLASS. @@ -52,14 +55,31 @@ CLASS ZCL_ABAPGIT_PROGRESS IMPLEMENTATION. METHOD show. - DATA: lv_pct TYPE i. + DATA: lv_pct TYPE i. + DATA: lv_time TYPE t. + + CONSTANTS: c_wait_secs TYPE i VALUE 2. lv_pct = calc_pct( iv_current ). - CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' - EXPORTING - percentage = lv_pct - text = iv_text. + GET TIME. + lv_time = sy-uzeit. + IF mv_cv_time_next IS INITIAL AND mv_cv_datum_next IS INITIAL. + mv_cv_time_next = lv_time. + mv_cv_datum_next = sy-datum. + ENDIF. + + "We only do a progress indication if enough time has passed + IF lv_time >= mv_cv_time_next AND sy-datum = mv_cv_datum_next OR + sy-datum > mv_cv_datum_next. + + CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' + EXPORTING + percentage = lv_pct + text = iv_text. + mv_cv_time_next = lv_time + c_wait_secs. + + ENDIF. ENDMETHOD. ENDCLASS. diff --git a/src/utils/zcl_abapgit_progress.clas.xml b/src/utils/zcl_abapgit_progress.clas.xml index e12404479..14b78dec7 100644 --- a/src/utils/zcl_abapgit_progress.clas.xml +++ b/src/utils/zcl_abapgit_progress.clas.xml @@ -14,6 +14,20 @@ X X + + + ZCL_ABAPGIT_PROGRESS + MV_CV_DATUM_NEXT + E + Date or Earliest, Next Progress Display + + + ZCL_ABAPGIT_PROGRESS + MV_CV_TIME_NEXT + E + Time of Earliest, Next Progress Display + + From 6db1b2fbfaf61ac422f893c817dce854d89109fc Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 6 Jul 2018 12:20:01 +0000 Subject: [PATCH 2/4] pretty print --- src/utils/zcl_abapgit_progress.clas.abap | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/zcl_abapgit_progress.clas.abap b/src/utils/zcl_abapgit_progress.clas.abap index 5b55e9b3d..eac593c87 100644 --- a/src/utils/zcl_abapgit_progress.clas.abap +++ b/src/utils/zcl_abapgit_progress.clas.abap @@ -21,10 +21,10 @@ CLASS zcl_abapgit_progress DEFINITION !iv_current TYPE i RETURNING VALUE(rv_pct) TYPE i . -private section. + PRIVATE SECTION. - data MV_CV_TIME_NEXT type SY-UZEIT . - data MV_CV_DATUM_NEXT type SY-DATUM . + DATA mv_cv_time_next TYPE sy-uzeit . + DATA mv_cv_datum_next TYPE sy-datum . ENDCLASS. From 7ec692389e59799ae1c3f4c01bbfbe23fec5422a Mon Sep 17 00:00:00 2001 From: mkaesemann <32765685+mkaesemann@users.noreply.github.com> Date: Fri, 6 Jul 2018 14:54:47 +0200 Subject: [PATCH 3/4] Fixed Date Calculation for Refresh Interval Detection Forgot to recalculate the date, so we don't run into problems if someone works late at night --- src/utils/zcl_abapgit_progress.clas.abap | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/utils/zcl_abapgit_progress.clas.abap b/src/utils/zcl_abapgit_progress.clas.abap index eac593c87..be23eac73 100644 --- a/src/utils/zcl_abapgit_progress.clas.abap +++ b/src/utils/zcl_abapgit_progress.clas.abap @@ -80,6 +80,12 @@ CLASS ZCL_ABAPGIT_PROGRESS IMPLEMENTATION. mv_cv_time_next = lv_time + c_wait_secs. ENDIF. + IF sy-datum > mv_cv_datum_next. + mv_cv_datum_next = sy-datum. + ENDIF. + IF mv_cv_time_next < lv_time. + mv_cv_datum_next = sy-datum + 1. + ENDIF. ENDMETHOD. ENDCLASS. From b80a10024b3f4cf95289cf78d52c1bc184428f6d Mon Sep 17 00:00:00 2001 From: mkaesemann <32765685+mkaesemann@users.noreply.github.com> Date: Fri, 6 Jul 2018 15:16:28 +0200 Subject: [PATCH 4/4] Moved progress percentage calculation into execution block Moved the progress percentage calculation into the execution block, because we don't need to calculate the percentage if we are not going to display it. --- src/utils/zcl_abapgit_progress.clas.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/utils/zcl_abapgit_progress.clas.abap b/src/utils/zcl_abapgit_progress.clas.abap index be23eac73..0cd04d52d 100644 --- a/src/utils/zcl_abapgit_progress.clas.abap +++ b/src/utils/zcl_abapgit_progress.clas.abap @@ -60,8 +60,6 @@ CLASS ZCL_ABAPGIT_PROGRESS IMPLEMENTATION. CONSTANTS: c_wait_secs TYPE i VALUE 2. - lv_pct = calc_pct( iv_current ). - GET TIME. lv_time = sy-uzeit. IF mv_cv_time_next IS INITIAL AND mv_cv_datum_next IS INITIAL. @@ -73,6 +71,8 @@ CLASS ZCL_ABAPGIT_PROGRESS IMPLEMENTATION. IF lv_time >= mv_cv_time_next AND sy-datum = mv_cv_datum_next OR sy-datum > mv_cv_datum_next. + lv_pct = calc_pct( iv_current ). + CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR' EXPORTING percentage = lv_pct