File Speed v0.1 - test of the file system speed

git-svn-id: svn://kolibrios.org@4835 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Marat Zakiyanov (Mario79) 2014-04-14 20:34:59 +00:00
parent b557d83df6
commit e896fe1315
5 changed files with 571 additions and 0 deletions

View File

@ -0,0 +1,6 @@
@erase lang.inc
@echo lang fix en >lang.inc
@fasm fspeed.asm fspeed
@kpack fspeed
@erase lang.inc
@pause

View File

@ -0,0 +1,6 @@
@erase lang.inc
@echo lang fix ru >lang.inc
@fasm fspeed.asm fspeed
@kpack fspeed
@erase lang.inc
@pause

View File

@ -0,0 +1,245 @@
;*****************************************************************************
; File Speed - for Kolibri OS
; Copyright (c) 2014, Marat Zakiyanov aka Mario79, aka Mario
; All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions are met:
; * Redistributions of source code must retain the above copyright
; notice, this list of conditions and the following disclaimer.
; * Redistributions in binary form must reproduce the above copyright
; notice, this list of conditions and the following disclaimer in the
; documentation and/or other materials provided with the distribution.
; * Neither the name of the <organization> nor the
; names of its contributors may be used to endorse or promote products
; derived from this software without specific prior written permission.
;
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
; DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
;*****************************************************************************
;-----------------------------------------------------------------------------
use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd IM_END
dd I_END
dd STACK_TOP
dd 0x0
dd cur_dir_path
;-----------------------------------------------------------------------------
include 'lang.inc'
include '../../macros.inc'
define __DEBUG__ 1
define __DEBUG_LEVEL__ 1
include '../../debug-fdo.inc'
include '../../develop/libraries/box_lib/load_lib.mac'
@use_library
;-----------------------------------------------------------------------------
START:
DEBUGF 1,'FSPEED: start of programm\n'
;-----------------------------------------------------------------------------
mcall 68,11
test eax,eax
jz exit
;-----------------------------------------------------------------------------
load_libraries l_libs_start,end_l_libs
;if return code =-1 then exit, else nornary work
inc eax
test eax,eax
jz exit
;-----------------------------------------------------------------------------
;OpenDialog initialisation
push dword OpenDialog_data
call [OpenDialog_Init]
;-----------------------------------------------------------------------------
red:
call draw_window
;-----------------------------------------------------------------------------
still:
mcall 10
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je button
jmp still
;-----------------------------------------------------------------------------
key:
mcall 2
jmp still
;-----------------------------------------------------------------------------
button:
mcall 17
cmp ah,2
je select_file
cmp ah,3
je testing
cmp ah,1
jne still
;--------------------------------------
exit:
mcall -1
;-----------------------------------------------------------------------------
select_file:
; invoke OpenDialog
mov [OpenDialog_data.type],dword 0
push dword OpenDialog_data
call [OpenDialog_Start]
cmp [OpenDialog_data.status],1
jne still
; prepare for PathShow
push dword PathShow_data
call [PathShow_prepare]
call draw_PathShow
jmp still
;-----------------------------------------------------------------------------
draw_PathShow:
mcall 13,<5,400-20>,<5,15>,0xffffff
; draw for PathShow
push dword PathShow_data
call [PathShow_draw]
ret
;-----------------------------------------------------------------------------
draw_window:
mcall 48,3,app_colours,4*10 ; get current colors
mcall 12,1
xor esi,esi
xor ebp,ebp
mov edx,[w_work] ; color of work area RRGGBB,8->color
or edx,0x34000000
mcall 0,<100,400>,<100,270>,,,title
call draw_PathShow
mcall 8,<5,80>,<25,15>,2,[w_work_button]
mcall 4,<5+10,25+4>,[w_work_button_text],s_text,s_text.size
mcall 8,<400-65,50>,<25,15>,3,[w_work_button]
mcall 4,<400-65+10,25+4>,[w_work_button_text],r_text,r_text.size
mov ebx,5 shl 16+47
mov ebp,result_table
mov ecx,18
;--------------------------------------
@@:
push ecx
mov ecx,[w_work_text]
or ecx,0x80000000
mcall 4,,,[ebp]
push ebx
mov edx,ebx
add edx,50 shl 16
mov ebx,0x800a0000
mcall 47,,[ebp+4],,[w_work_text]
pop ebx
add ebx,6+5
add ebp,12
pop ecx
dec ecx
jnz @b
mcall 12,2
ret
;-----------------------------------------------------------------------------;-----------------------------------------------------------------------------
testing:
mcall 70,fileinfo
test eax,eax
jz @f
DEBUGF 1,'FSPEED: file not found %s\n',fname
jmp still
;--------------------------------------
@@:
DEBUGF 1,'FSPEED: target file %s\n',fname
mov ebp,result_table
mov ecx,18
;--------------------------------------
@@:
push ecx
call read_chunk
pop ecx
add ebp,12
pusha
call draw_window
popa
dec ecx
jnz @b
jmp still
;-----------------------------------------------------------------------------
read_chunk:
mov eax,[file_info+32] ; file size
cmp [ebp+8],eax ; chunk size
jb @f
xor eax,eax
mov [ebp+4],eax ; small file size for current chunk size
ret
;--------------------------------------
@@:
mcall 68,12,[ebp+8] ; chunk size
mov [fileread.return],eax
xor eax,eax
mov [fileread.offset],eax ; zero current offset
mcall 26,9 ; get start time
add eax,1600 ; 16 sec for iterations
mov esi,eax
mov ecx,1
mov eax,[ebp+8] ; chunk size
mov [fileread.size],eax
;--------------------------------------
.loop:
mcall 70,fileread
mcall 26,9 ; check current time
cmp esi,eax
jbe .end
; correct offset
mov edx,[ebp+8] ; chunk size
add [fileread.offset],edx ; current offset
; check offset and file size
mov edx,[file_info+32] ; file size
sub edx,[ebp+8] ; chunk size
cmp [fileread.offset],edx
jbe @f
xor edx,edx
mov [fileread.offset],edx ; zero current offset
;--------------------------------------
@@:
inc ecx
jmp .loop
;--------------------------------------
.end:
mov eax,[ebp+8]
imul eax,ecx
shr eax,10+4
mov [ebp+4],eax ; speed KB/s
DEBUGF 1,'FSPEED: chunk size: %s iterations: %d speed: %d KB/s\n',[ebp],ecx,eax
mcall 68,13,[fileread.return]
ret
;-----------------------------------------------------------------------------
include 'idata.inc'
;-----------------------------------------------------------------------------
IM_END:
;-----------------------------------------------------------------------------
include 'udata.inc'
;-----------------------------------------------------------------------------
I_END:
;-----------------------------------------------------------------------------

View File

@ -0,0 +1,271 @@
;-----------------------------------------------------------------------------
lsz s_text,\
ru,'‚ë¡®à ä ©« ',\
en,'Select file'
;-----------------------------------------------------------------------------
lsz r_text,\
ru,'<27>ãáª',\
en,'Start'
;-----------------------------------------------------------------------------
title db 'File Speed v0.1',0
;-----------------------------------------------------------------------------
include_debug_strings
;-----------------------------------------------------------------------------
l_libs_start:
library01 l_libs system_dir_Boxlib+9, cur_dir_path, library_path, system_dir_Boxlib, \
err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i
library02 l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \
err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
end_l_libs:
;-----------------------------------------------------------------------------
system_dir_Boxlib db '/sys/lib/box_lib.obj',0
system_dir_ProcLib db '/sys/lib/proc_lib.obj',0
head_f_i:
head_f_l db 'System error',0
err_message_found_lib1 db 'box_lib.obj - Not found!',0
err_message_found_lib2 db 'proc_lib.obj - Not found!',0
err_message_import1 db 'box_lib.obj - Wrong import!',0
err_message_import2 db 'proc_lib.obj - Wrong import!',0
;-----------------------------------------------------------------------------
align 4
ProcLib_import:
OpenDialog_Init dd aOpenDialog_Init
OpenDialog_Start dd aOpenDialog_Start
;OpenDialog_Version dd aOpenDialog_Version
;ColorDialog_Init dd aColorDialog_Init
;ColorDialog_Start dd aColorDialog_Start
;ColorDialog_Version dd aColorDialog_Version
dd 0
dd 0
aOpenDialog_Init db 'OpenDialog_init',0
aOpenDialog_Start db 'OpenDialog_start',0
;aOpenDialog_Version db 'Version_OpenDialog',0
;aColorDialog_Init db 'ColorDialog_init',0
;aColorDialog_Start db 'ColorDialog_start',0
;aColorDialog_Version db 'Version_ColorDialog',0
;-----------------------------------------------------------------------------
align 4
Box_lib_import:
;init_lib dd a_init
;version_lib dd a_version
;edit_box_draw dd aEdit_box_draw
;edit_box_key dd aEdit_box_key
;edit_box_mouse dd aEdit_box_mouse
;version_ed dd aVersion_ed
;check_box_draw dd aCheck_box_draw
;check_box_mouse dd aCheck_box_mouse
;version_ch dd aVersion_ch
;option_box_draw dd aOption_box_draw
;option_box_mouse dd aOption_box_mouse
;version_op dd aVersion_op
;scrollbar_ver_draw dd aScrollbar_ver_draw
;scrollbar_ver_mouse dd aScrollbar_ver_mouse
;scrollbar_hor_draw dd aScrollbar_hor_draw
;scrollbar_hor_mouse dd aScrollbar_hor_mouse
;version_scrollbar dd aVersion_scrollbar
;dinamic_button_draw dd aDbutton_draw
;dinamic_button_mouse dd aDbutton_mouse
;version_dbutton dd aVersion_dbutton
;menu_bar_draw dd aMenu_bar_draw
;menu_bar_mouse dd aMenu_bar_mouse
;menu_bar_activate dd aMenu_bar_activate
;version_menu_bar dd aVersion_menu_bar
;FileBrowser_draw dd aFileBrowser_draw
;FileBrowser_mouse dd aFileBrowser_mouse
;FileBrowser_key dd aFileBrowser_key
;Version_FileBrowser dd aVersion_FileBrowser
PathShow_prepare dd sz_PathShow_prepare
PathShow_draw dd sz_PathShow_draw
;Version_path_show dd szVersion_path_show
;Frame_draw dd sz_Frame_draw
;Version_frame dd szVersion_frame
dd 0
dd 0
;a_init db 'lib_init',0
;a_version db 'version',0
;aEdit_box_draw db 'edit_box',0
;aEdit_box_key db 'edit_box_key',0
;aEdit_box_mouse db 'edit_box_mouse',0
;aVersion_ed db 'version_ed',0
;aCheck_box_draw db 'check_box_draw',0
;aCheck_box_mouse db 'check_box_mouse',0
;aVersion_ch db 'version_ch',0
;aOption_box_draw db 'option_box_draw',0
;aOption_box_mouse db 'option_box_mouse',0
;aVersion_op db 'version_op',0
;aScrollbar_ver_draw db 'scrollbar_v_draw',0
;aScrollbar_ver_mouse db 'scrollbar_v_mouse',0
;aScrollbar_hor_draw db 'scrollbar_h_draw',0
;aScrollbar_hor_mouse db 'scrollbar_h_mouse',0
;aVersion_scrollbar db 'version_scrollbar',0
;aDbutton_draw db 'dbutton_draw',0
;aDbutton_mouse db 'dbutton_mouse',0
;aVersion_dbutton db 'version_dbutton',0
;aMenu_bar_draw db 'menu_bar_draw',0
;aMenu_bar_mouse db 'menu_bar_mouse',0
;aMenu_bar_activate db 'menu_bar_activate',0
;aVersion_menu_bar db 'version_menu_bar',0
;aFileBrowser_draw db 'FileBrowser_draw',0
;aFileBrowser_mouse db 'FileBrowser_mouse',0
;aFileBrowser_key db 'FileBrowser_key',0
;aVersion_FileBrowser db 'version_FileBrowser',0
sz_PathShow_prepare db 'PathShow_prepare',0
sz_PathShow_draw db 'PathShow_draw',0
;szVersion_path_show db 'version_PathShow',0
;sz_Frame_draw db 'frame_draw',0
;szVersion_frame db 'version_frame',0
;-----------------------------------------------------------------------------
PathShow_data:
.type dd 0 ;+0
.start_y dw 5+4 ;+4
.start_x dw 5+5 ;+6
.font_size_x dw 6 ;+8 ; 6 - for font 0, 8 - for font 1
.area_size_x dw 400-30 ;+10
.font_number dd 0 ;+12 ; 0 - monospace, 1 - variable
.background_flag dd 0 ;+16
.font_color dd 0x0 ;+20
.background_color dd 0x0 ;+24
.text_pointer dd fname ;+28
.work_area_pointer dd text_work_area ;+32
.temp_text_length dd 0 ;+36
;-----------------------------------------------------------------------------
OpenDialog_data:
.type dd 0
.procinfo dd process_info ;+4
.com_area_name dd communication_area_name ;+8
.com_area dd 0 ;+12
.opendir_pach dd temp_dir_pach ;+16
.dir_default_pach dd communication_area_default_pach ;+20
.start_path dd open_dialog_path ;+24
.draw_window dd draw_window ;+28
.status dd 0 ;+32
.openfile_pach dd fname ;+36
.filename_area dd filename_area ;+40
.filter_area dd Filter
.x:
.x_size dw 420 ;+48 ; Window X size
.x_start dw 10 ;+50 ; Window X position
.y:
.y_size dw 320 ;+52 ; Window y size
.y_start dw 10 ;+54 ; Window Y position
communication_area_name:
db 'FFFFFFFF_open_dialog2',0
open_dialog_path:
if __nightbuild eq yes
db '/sys/MANAGERS/opendial',0
else
db '/sys/File Managers/opendial',0
end if
communication_area_default_pach:
db '/sys',0
Filter:
dd Filter.end - Filter.1
.1:
;db 'BIN',0
;db 'DAT',0
.end:
db 0
start_temp_file_name:
db 'default.dtp',0
default_dtp:
db '/sys/default.dtp',0
;-----------------------------------------------------------------------------
sector equ 512
;--------------------------------------
result_table:
dd a512b, 0, sector*1
dd a1K, 1, sector*2
dd a2K, 2, sector*4
dd a4K, 3, sector*8
dd a8K, 4, sector*16
dd a16K, 5, sector*32
dd a32K, 6, sector*64
dd a64K, 7, sector*128
dd a128K, 8, sector*256
dd a256K, 9, sector*512
dd a512K, 10, sector*1024
dd a1M, 11, sector*2*1024
dd a2M, 12, sector*4*1024
dd a4M, 13, sector*8*1024
dd a8M, 14, sector*16*1024
dd a16M, 15, sector*32*1024
dd a32M, 16, sector*64*1024
dd a64M, -1, sector*128*1024
;-----------------------------------------------------------------------------
a512b db ' 512',0
a1K db ' 1K',0
a2K db ' 2K',0
a4K db ' 4K',0
a8K db ' 8K',0
a16K db ' 16K',0
a32K db ' 32K',0
a64K db ' 64K',0
a128K db '128K',0
a256K db '256K',0
a512K db '512K',0
a1M db ' 1M',0
a2M db ' 2M',0
a4M db ' 4M',0
a8M db ' 8M',0
a16M db ' 16M',0
a32M db ' 32M',0
a64M db ' 64M',0
;-----------------------------------------------------------------------------
align 4
fileinfo:
.subfunction dd 5
.offset dd 0
.offset_1 dd 0
.size dd 0
.return dd file_info
db 0
.name: dd fname
;-----------------------------------------------------------------------------
align 4
fileread:
.subfunction dd 0
.offset dd 0
.offset_1 dd 0
.size dd 0
.return dd process_info
db 0
.name: dd fname
;-----------------------------------------------------------------------------

View File

@ -0,0 +1,43 @@
;-----------------------------------------------------------------------------
align 4
cur_dir_path:
rb 4096
;-----------------------------------------------------------------------------
library_path:
rb 4096
;-----------------------------------------------------------------------------
temp_dir_pach:
rb 4096
;-----------------------------------------------------------------------------
process_info:
rb 1024
;-----------------------------------------------------------------------------
fname:
rb 4096
;-----------------------------------------------------------------------------
filename_area:
rb 256
;-----------------------------------------------------------------------------
text_work_area:
rb 1024
;-----------------------------------------------------------------------------
file_info:
rb 40
;-----------------------------------------------------------------------------
align 4
app_colours:
w_frame dd ?
w_grab dd ?
w_grab_button dd ?
w_grab_button_text dd ?
w_grab_text dd ?
w_work dd ?
w_work_button dd ?
w_work_button_text dd ?
w_work_text dd ?
w_work_graph dd ?
;-----------------------------------------------------------------------------
align 4
rb 256
STACK_TOP:
;-----------------------------------------------------------------------------