OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [net/] [autotest/] [current/] [tests/] [memcheck.inl] - Blame information for rev 825

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 786 skrzyp
//==========================================================================
2
//
3
//      tests/auto/memcheck.inl
4
//
5
//      Automated Testing by a Host Computer
6
//
7
//==========================================================================
8
// ####ECOSGPLCOPYRIGHTBEGIN####
9
// -------------------------------------------
10
// This file is part of eCos, the Embedded Configurable Operating System.
11
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
12
//
13
// eCos is free software; you can redistribute it and/or modify it under
14
// the terms of the GNU General Public License as published by the Free
15
// Software Foundation; either version 2 or (at your option) any later
16
// version.
17
//
18
// eCos is distributed in the hope that it will be useful, but WITHOUT
19
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20
// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
21
// for more details.
22
//
23
// You should have received a copy of the GNU General Public License
24
// along with eCos; if not, write to the Free Software Foundation, Inc.,
25
// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
26
//
27
// As a special exception, if other files instantiate templates or use
28
// macros or inline functions from this file, or you compile this file
29
// and link it with other works to produce a work based on this file,
30
// this file does not by itself cause the resulting work to be covered by
31
// the GNU General Public License. However the source code for this file
32
// must still be made available in accordance with section (3) of the GNU
33
// General Public License v2.
34
//
35
// This exception does not invalidate any other reasons why a work based
36
// on this file might be covered by the GNU General Public License.
37
// -------------------------------------------
38
// ####ECOSGPLCOPYRIGHTEND####
39
// ####BSDALTCOPYRIGHTBEGIN####
40
// -------------------------------------------
41
// Portions of this software may have been derived from FreeBSD, OpenBSD,
42
// or other sources, and if so are covered by the appropriate copyright
43
// and license included herein.
44
// -------------------------------------------
45
// ####BSDALTCOPYRIGHTEND####
46
//==========================================================================
47
//#####DESCRIPTIONBEGIN####
48
//
49
// Author(s):    hmt
50
// Contributors: hmt
51
// Date:         2000-11-10
52
// Purpose:      Check memory usage of the eCos TCP/IP Network Stack
53
// Description:
54
 
55
#ifndef CYG_NET_GET_MEM_STATS_MISC
56
// API is not present, so dummies:
57
void memcheck_init( void )  {}
58
void memcheck_final( void ) {}
59
#else
60
 
61
#include 
62
extern struct  mbstat mbstat;
63
 
64
extern void cyg_kmem_print_stats( void );
65
 
66
cyg_mempool_info initial[3], final[3];
67
 
68
#define RATIO 15
69
 
70
static char *names[3] = { "Misc", "Mbufs", "Clusters" };
71
 
72
void memcheck_init( void )
73
{
74
    int i;
75
 
76
    cyg_kmem_print_stats();
77
 
78
    for ( i = 0; i < 3; i++ )
79
        if ( ! cyg_net_get_mem_stats( i, initial + i ) )
80
            CYG_TEST_FAIL( "Getting initial mem stats" );
81
}
82
 
83
void memcheck_final( void )
84
{
85
    int i;
86
    for ( i = 0; i < 3; i++ )
87
        if ( ! cyg_net_get_mem_stats( i, final + i ) )
88
            CYG_TEST_FAIL( "Getting final mem stats" );
89
 
90
    cyg_kmem_print_stats();
91
 
92
    // NB do NOT check clusters (index 2) because clusters are managed
93
    // differently.
94
    for ( i = 0; i < 3; i++ ) {
95
        int size = final[i].totalmem;
96
        int initial_used = size - initial[i].freemem;
97
        int margin = size * RATIO / 100;
98
        int final_used = size - final[i].freemem;
99
        int extra_used = final_used - initial_used;
100
 
101
        if ( 2 == i ) {
102
#ifdef XFAIL
103
            // ignore clusters if a faulty network is being simulated
104
            // because memory gets eaten for partial packets awaiting
105
            // reassembly.
106
            continue;
107
#else
108
            // Then it's clusters - they're managed differently
109
            final_used -= (mbstat.m_clfree * final[i].blocksize);
110
            extra_used = final_used - initial_used;
111
#endif
112
        }
113
 
114
        // Using up up to whatever was initially used -or- the percentage
115
        // we test for; whichever is larger, is OK.
116
        if ( (extra_used > initial_used) && (extra_used > margin) ) {
117
            CYG_TEST_INFO( "Memory leak suspected" );
118
            CYG_TEST_INFO( names[i] );
119
            CYG_TEST_INFO( (final[i].blocksize > 0) ?
120
                           "Variable mempool" : "Fixed mempool" );
121
            CYG_TEST_FAIL( "Too much memory used - storeleak suspected" );
122
        }
123
    }
124
}
125
 
126
#undef RATIO
127
 
128
#endif
129
 
130
// EOF memcheck.inl

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.