diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
index ad81cb07c19a99d68c641770754134fcc3783220..ba90becb6084a524aa0ebbccd368d7eecba1ccd6 100644
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -202,6 +202,7 @@ LLContextMenu* gDetachBodyPartPieMenus[9];
 
 // File Menu
 void handle_compress_image(void*);
+void handle_compress_file_test(void*);
 
 
 // Edit menu
@@ -2171,6 +2172,21 @@ class LLAdvancedCompressImage : public view_listener_t
 };
 
 
+
+////////////////////////
+// COMPRESS FILE TEST //
+////////////////////////
+
+class LLAdvancedCompressFileTest : public view_listener_t
+{
+    bool handleEvent(const LLSD& userdata)
+    {
+        handle_compress_file_test(NULL);
+        return true;
+    }
+};
+
+
 /////////////////////////
 // SHOW DEBUG SETTINGS //
 /////////////////////////
@@ -9284,6 +9300,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedToggleShowObjectUpdates(), "Advanced.ToggleShowObjectUpdates");
 	view_listener_t::addMenu(new LLAdvancedCheckShowObjectUpdates(), "Advanced.CheckShowObjectUpdates");
 	view_listener_t::addMenu(new LLAdvancedCompressImage(), "Advanced.CompressImage");
+    view_listener_t::addMenu(new LLAdvancedCompressFileTest(), "Advanced.CompressFileTest");
 	view_listener_t::addMenu(new LLAdvancedShowDebugSettings(), "Advanced.ShowDebugSettings");
 	view_listener_t::addMenu(new LLAdvancedEnableViewAdminOptions(), "Advanced.EnableViewAdminOptions");
 	view_listener_t::addMenu(new LLAdvancedToggleViewAdminOptions(), "Advanced.ToggleViewAdminOptions");
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
index 15181dcd9f7635f8163cf4f865d47b370a9c3e5a..43f99fc13a25669a48118771b02f27811b1213e3 100644
--- a/indra/newview/llviewermenufile.cpp
+++ b/indra/newview/llviewermenufile.cpp
@@ -775,6 +775,94 @@ void handle_compress_image(void*)
 	}
 }
 
+// No convinient check in LLFile, and correct way would be something
+// like GetFileSizeEx, which is too OS specific for current purpose
+// so doing dirty, but OS independent fopen and fseek
+size_t get_file_size(std::string &filename)
+{
+    LLFILE* file = LLFile::fopen(filename, "rb");		/*Flawfinder: ignore*/
+    if (!file)
+    {
+        LL_WARNS() << "Error opening " << filename << LL_ENDL;
+        return 0;
+    }
+
+    // read in the whole file
+    fseek(file, 0L, SEEK_END);
+    size_t file_length = (size_t)ftell(file);
+    fclose(file);
+    return file_length;
+}
+
+void handle_compress_file_test(void*)
+{
+    LLFilePicker& picker = LLFilePicker::instance();
+    if (picker.getOpenFile())
+    {
+        std::string infile = picker.getFirstFile();
+        if (!infile.empty())
+        {
+            std::string packfile = infile + ".pack_test";
+            std::string unpackfile = infile + ".unpack_test";
+
+            S64Bytes initial_size = S64Bytes(get_file_size(infile));
+
+            BOOL success;
+
+            F64 total_seconds = LLTimer::getTotalSeconds();
+            success = gzip_file(infile, packfile);
+            F64 result_pack_seconds = LLTimer::getTotalSeconds() - total_seconds;
+
+            if (success)
+            {
+                S64Bytes packed_size = S64Bytes(get_file_size(packfile));
+
+                LL_INFOS() << "Packing complete, time: " << result_pack_seconds << " size: " << packed_size << LL_ENDL;
+                total_seconds = LLTimer::getTotalSeconds();
+                success = gunzip_file(packfile, unpackfile);
+                F64 result_unpack_seconds = LLTimer::getTotalSeconds() - total_seconds;
+
+                if (success)
+                {
+                    S64Bytes unpacked_size = S64Bytes(get_file_size(unpackfile));
+
+                    LL_INFOS() << "Unpacking complete, time: " << result_unpack_seconds << " size: " << unpacked_size << LL_ENDL;
+
+                    LLSD args;
+                    args["FILE"] = infile;
+                    args["PACK_TIME"] = result_pack_seconds;
+                    args["UNPACK_TIME"] = result_unpack_seconds;
+                    args["SIZE"] = LLSD::Integer(initial_size.valueInUnits<LLUnits::Kilobytes>());
+                    args["PSIZE"] = LLSD::Integer(packed_size.valueInUnits<LLUnits::Kilobytes>());
+                    args["USIZE"] = LLSD::Integer(unpacked_size.valueInUnits<LLUnits::Kilobytes>());
+                    LLNotificationsUtil::add("CompressionTestResults", args);
+
+                    LLFile::remove(packfile);
+                    LLFile::remove(unpackfile);
+                }
+                else
+                {
+                    LL_INFOS() << "Failed to uncompress file: " << packfile << LL_ENDL;
+                    LLFile::remove(packfile);
+                }
+
+            }
+            else
+            {
+                LL_INFOS() << "Failed to compres file: " << infile << LL_ENDL;
+            }
+        }
+        else
+        {
+            LL_INFOS() << "Failed to open file" << LL_ENDL;
+        }
+    }
+    else
+    {
+        LL_INFOS() << "Failed to open file" << LL_ENDL;
+    }
+}
+
 
 LLUUID upload_new_resource(
 	const std::string& src_filename,
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
index 72cce2208f9a7310efa58ffdbda1926db13885a2..6ddaa99f783e8f8d0d07c7b89fbb2493c676a08f 100644
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -3883,6 +3883,12 @@ function="World.EnvPreset"
             <menu_item_call.on_click
              function="Advanced.CompressImage" />
         </menu_item_call>
+      <menu_item_call
+       label="Compress File Test"
+       name="Compress File Test">
+        <menu_item_call.on_click
+         function="Advanced.CompressFileTest" />
+      </menu_item_call>
 
       <menu_item_call
          label="Enable Visual Leak Detector"
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
index d4f71fb370c2f473bf967cc89b8e4db2065d960f..95eedf0cf8ea792bbf66a89d4a782d522792081a 100644
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -11777,5 +11777,15 @@ Unable to load the track into [TRACK].
 Unable to load the track from [TRACK1] into [TRACK2].
   <tag>fail</tag>
   </notification>
+
+  <notification
+   icon="alertmodal.tga"
+   name="CompressionTestResults"
+   type="alertmodal">
+Test result for gzip level 6 file compression with [FILE] of size [SIZE] KB:
+Packing: [PACK_TIME]s [PSIZE]KB
+Unpacking: [UNPACK_TIME]s [USIZE]KB
+    <tag>fail</tag>
+  </notification>
   
 </notifications>