[haiku-commits] BRANCH pdziepak-github.scheduler [320164b] in src: add-ons/kernel/drivers/graphics/common system/libroot/posix/malloc apps/processcontroller

  • From: pdziepak-github.scheduler <community@xxxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 13 Dec 2013 04:15:29 +0100 (CET)

added 4 changesets to branch 'refs/remotes/pdziepak-github/scheduler'
old head: 714cb88c32b7100e60ccfacb0acacfa28b5708a1
new head: 320164b37031fa8edd7b8267516961adf3261063
overview: https://github.com/pdziepak/Haiku/compare/714cb88...320164b

----------------------------------------------------------------------------

4c2e4f9: libroot: Fix Hoard when the CPU count is not a power of two

6790f0a: ProcessController: Explicitly check thread priority

406bab7: apps/BSnow: Do not use cpu_clock_speed

320164b: drivers/graphics: Remove log_{coll, dump}
  
  log_coll.c and log_dump.{c, h} don't appear to be used by anything.

                                    [ Pawel Dziepak <pdziepak@xxxxxxxxxxx> ]

----------------------------------------------------------------------------

10 files changed, 32 insertions(+), 247 deletions(-)
.../kernel/drivers/graphics/common/Jamfile       |   2 -
.../kernel/drivers/graphics/common/log_coll.c    | 129 -------------------
.../kernel/drivers/graphics/common/log_dump.c    |  73 -----------
.../kernel/drivers/graphics/common/log_dump.h    |  17 ---
src/apps/bsnow/SnowView.cpp                      |   2 +-
src/apps/processcontroller/ThreadBarMenuItem.cpp |  16 ++-
src/system/libroot/posix/malloc/heap.cpp         |   5 +-
src/system/libroot/posix/malloc/heap.h           |   6 +
src/system/libroot/posix/malloc/processheap.cpp  |  17 ++-
src/system/libroot/posix/malloc/processheap.h    |  12 +-

############################################################################

Commit:      4c2e4f9f0b28b78ab21a3d6b9d6c623ded6547d7
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Thu Dec 12 20:14:25 2013 UTC

libroot: Fix Hoard when the CPU count is not a power of two

----------------------------------------------------------------------------

diff --git a/src/system/libroot/posix/malloc/heap.cpp 
b/src/system/libroot/posix/malloc/heap.cpp
index 5ded947..99aba54 100644
--- a/src/system/libroot/posix/malloc/heap.cpp
+++ b/src/system/libroot/posix/malloc/heap.cpp
@@ -99,6 +99,7 @@ size_t hoardHeap::_threshold[hoardHeap::SIZE_CLASSES] = {
 #endif
 
 
+int hoardHeap::fMaxThreadHeaps = 1;
 int hoardHeap::_numProcessors;
 int hoardHeap::_numProcessorsMask;
 
@@ -454,7 +455,7 @@ hoardHeap::initNumProcs(void)
        else
                hoardHeap::_numProcessors = info.cpu_count;
 
-       hoardHeap::_numProcessorsMask =
-               (1 << (lg(hoardHeap::_numProcessors) + 1)) - 1;
+       fMaxThreadHeaps = 1 << (lg(_numProcessors) + 1);
+       _numProcessorsMask = fMaxThreadHeaps - 1;
 }
 
diff --git a/src/system/libroot/posix/malloc/heap.h 
b/src/system/libroot/posix/malloc/heap.h
index 84747c2..b2a9ed6 100644
--- a/src/system/libroot/posix/malloc/heap.h
+++ b/src/system/libroot/posix/malloc/heap.h
@@ -205,6 +205,12 @@ class hoardHeap {
                static void initNumProcs(void);
 
        protected:
+               // The maximum number of thread heaps we allow.  (NOT the 
maximum
+               // number of threads -- Hoard imposes no such limit.)  This 
must be
+               // a power of two! NB: This number is twice the maximum number 
of
+               // PROCESSORS supported by Hoard.
+               static int fMaxThreadHeaps;
+
                // number of CPUs, cached
                static int _numProcessors;
                static int _numProcessorsMask;
diff --git a/src/system/libroot/posix/malloc/processheap.cpp 
b/src/system/libroot/posix/malloc/processheap.cpp
index 808c42a..129cf4c 100644
--- a/src/system/libroot/posix/malloc/processheap.cpp
+++ b/src/system/libroot/posix/malloc/processheap.cpp
@@ -37,8 +37,7 @@ using namespace BPrivate;
 
 processHeap::processHeap()
        :
-       kMaxThreadHeaps(_numProcessors * 2),
-       theap((HEAPTYPE*)hoardSbrk(sizeof(HEAPTYPE) * kMaxThreadHeaps)),
+       theap((HEAPTYPE*)hoardSbrk(sizeof(HEAPTYPE) * fMaxThreadHeaps)),
 #if HEAP_FRAG_STATS
        _currentAllocated(0),
        _currentRequested(0),
@@ -48,32 +47,32 @@ processHeap::processHeap()
 #endif
 #if HEAP_LOG
        _log((Log<MemoryRequest>*)
-               hoardSbrk(sizeof(Log<MemoryRequest>) * (kMaxThreadHeaps + 1))),
+               hoardSbrk(sizeof(Log<MemoryRequest>) * (fMaxThreadHeaps + 1))),
 #endif
        _buffer(NULL),
        _bufferCount(0)
 {
        if (theap == NULL)
                return;
-       new(theap) HEAPTYPE[kMaxThreadHeaps];
+       new(theap) HEAPTYPE[fMaxThreadHeaps];
 
 #if HEAP_LOG
        if (_log == NULL)
                return;
-       new(_log) Log<MemoryRequest>[kMaxThreadHeaps + 1];
+       new(_log) Log<MemoryRequest>[fMaxThreadHeaps + 1];
 #endif
 
        int i;
        // The process heap is heap 0.
        setIndex(0);
-       for (i = 0; i < kMaxThreadHeaps; i++) {
+       for (i = 0; i < fMaxThreadHeaps; i++) {
                // Set every thread's process heap to this one.
                theap[i].setpHeap(this);
                // Set every thread heap's index.
                theap[i].setIndex(i + 1);
        }
 #if HEAP_LOG
-       for (i = 0; i < kMaxThreadHeaps + 1; i++) {
+       for (i = 0; i < fMaxThreadHeaps + 1; i++) {
                char fname[255];
                sprintf(fname, "log%d", i);
                unlink(fname);
@@ -94,7 +93,7 @@ processHeap::stats(void)
 #if HEAP_STATS
        int umax = 0;
        int amax = 0;
-       for (int j = 0; j < kMaxThreadHeaps; j++) {
+       for (int j = 0; j < fMaxThreadHeaps; j++) {
                for (int i = 0; i < SIZE_CLASSES; i++) {
                        amax += theap[j].maxAllocated(i) * sizeFromClass(i);
                        umax += theap[j].maxInUse(i) * sizeFromClass(i);
@@ -118,7 +117,7 @@ processHeap::stats(void)
 #if HEAP_LOG
        printf("closing logs.\n");
        fflush(stdout);
-       for (int i = 0; i < kMaxThreadHeaps + 1; i++) {
+       for (int i = 0; i < fMaxThreadHeaps + 1; i++) {
                _log[i].close();
        }
 #endif
diff --git a/src/system/libroot/posix/malloc/processheap.h 
b/src/system/libroot/posix/malloc/processheap.h
index 4aa17c7..f222289 100644
--- a/src/system/libroot/posix/malloc/processheap.h
+++ b/src/system/libroot/posix/malloc/processheap.h
@@ -132,12 +132,6 @@ class processHeap : public hoardHeap {
                processHeap(const processHeap &);
                const processHeap & operator=(const processHeap &);
 
-               // The maximum number of thread heaps we allow.  (NOT the 
maximum
-               // number of threads -- Hoard imposes no such limit.)  This 
must be
-               // a power of two! NB: This number is twice the maximum number 
of
-               // PROCESSORS supported by Hoard.
-               const int kMaxThreadHeaps;
-
                // The per-thread heaps.
                HEAPTYPE* theap;
 
@@ -174,7 +168,7 @@ processHeap::getHeap(int i)
 {
        assert(theap != NULL);
        assert(i >= 0);
-       assert(i < kMaxThreadHeaps);
+       assert(i < fMaxThreadHeaps);
        return theap[i];
 }
 
@@ -185,7 +179,7 @@ processHeap::getLog(int i)
 {
        assert(_log != NULL);
        assert(i >= 0);
-       assert(i < kMaxThreadHeaps + 1);
+       assert(i < fMaxThreadHeaps + 1);
        return _log[i];
 }
 #endif
@@ -200,7 +194,7 @@ processHeap::getHeapIndex(void)
        // In fact, for efficiency, we just round up to the highest power of 
two,
        // times two.
        int tid = find_thread(NULL) & _numProcessorsMask;
-       assert(tid < kMaxThreadHeaps);
+       assert(tid < fMaxThreadHeaps);
        return tid;
 }
 

############################################################################

Commit:      6790f0ad22c7c099be958455817b33726b74c581
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Thu Dec 12 20:46:48 2013 UTC

ProcessController: Explicitly check thread priority

----------------------------------------------------------------------------

diff --git a/src/apps/processcontroller/ThreadBarMenuItem.cpp 
b/src/apps/processcontroller/ThreadBarMenuItem.cpp
index 8af186b..94b2d1d 100644
--- a/src/apps/processcontroller/ThreadBarMenuItem.cpp
+++ b/src/apps/processcontroller/ThreadBarMenuItem.cpp
@@ -104,10 +104,16 @@ ThreadBarMenuItem::DrawBar(bool force)
                        r.right = fGrenze1;
        }
        if (r.left < r.right) {
-               if (selected)
-                       menu->SetHighColor(fThreadID <= gCPUcount ? 
gIdleColorSelected : gUserColorSelected);
-               else
-                       menu->SetHighColor(fThreadID <= gCPUcount ? gIdleColor 
: gUserColor);
+               thread_info threadInfo;
+               bool idleThread = false;
+               if (get_thread_info(fThreadID, &threadInfo) == B_OK)
+                       idleThread = threadInfo.priority == B_IDLE_PRIORITY;
+
+               if (selected) {
+                       menu->SetHighColor(
+                               idleThread ? gIdleColorSelected : 
gUserColorSelected);
+               } else
+                       menu->SetHighColor(idleThread ? gIdleColor : 
gUserColor);
                menu->FillRect(r);
        }
        r.left = grenze2;
@@ -157,7 +163,7 @@ ThreadBarMenuItem::BarUpdate()
                bigtime_t now = system_time();
                fKernel = double(info.kernel_time - fThreadInfo.kernel_time) / 
double(now - fLastTime);
                fUser = double(info.user_time - fThreadInfo.user_time) / 
double(now - fLastTime);
-               if (fThreadID <= gCPUcount) {
+               if (info.priority == B_IDLE_PRIORITY) {
                        fUser += fKernel;
                        fKernel = 0;
                }

############################################################################

Commit:      406bab7a62a484d9f6daa713bf48d578439efe11
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Fri Dec 13 01:38:35 2013 UTC

apps/BSnow: Do not use cpu_clock_speed

----------------------------------------------------------------------------

diff --git a/src/apps/bsnow/SnowView.cpp b/src/apps/bsnow/SnowView.cpp
index 1a3765d..5c3935a 100644
--- a/src/apps/bsnow/SnowView.cpp
+++ b/src/apps/bsnow/SnowView.cpp
@@ -87,7 +87,7 @@ SnowView::SnowView(BMessage *archive)
        fShowClickMe = false;
        SetFlags(Flags() & ~B_PULSE_NEEDED); /* it's only used when in the app 
*/
        get_system_info(&si);
-       fNumFlakes = ((int32)(si.cpu_clock_speed/1000000)) * si.cpu_count / 3; 
//;
+       fNumFlakes = 1000 * si.cpu_count / 3;
        printf("BSnow: using %ld flakes\n", fNumFlakes);
        for (int i = 0; i < WORKSPACES_COUNT; i++) {
                fFlakes[i] = new flake[fNumFlakes];

############################################################################

Commit:      320164b37031fa8edd7b8267516961adf3261063
Author:      Pawel Dziepak <pdziepak@xxxxxxxxxxx>
Date:        Fri Dec 13 01:44:29 2013 UTC

drivers/graphics: Remove log_{coll, dump}

log_coll.c and log_dump.{c, h} don't appear to be used by anything.

----------------------------------------------------------------------------

diff --git a/src/add-ons/kernel/drivers/graphics/common/Jamfile 
b/src/add-ons/kernel/drivers/graphics/common/Jamfile
index 7ea4092..6fb4bde 100644
--- a/src/add-ons/kernel/drivers/graphics/common/Jamfile
+++ b/src/add-ons/kernel/drivers/graphics/common/Jamfile
@@ -9,7 +9,5 @@ UsePrivateHeaders [ FDirName graphics radeon ] ;
 UsePrivateHeaders [ FDirName graphics common ] ;
 
 StaticLibrary libgraphicscommon.a :
-       log_coll.c
-       log_dump.c
        memory_manager.c
 ;
diff --git a/src/add-ons/kernel/drivers/graphics/common/log_coll.c 
b/src/add-ons/kernel/drivers/graphics/common/log_coll.c
deleted file mode 100644
index f9dec1e..0000000
--- a/src/add-ons/kernel/drivers/graphics/common/log_coll.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-       Copyright (c) 2002, Thomas Kurschel
-
-       Part of Radeon driver
-
-       Both kernel and user space part.
-       (init and clean-up must be done in
-       kernel space).
-*/
-
-
-#include "log_coll.h"
-
-#include <KernelExport.h>
-#include <OS.h>
-
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-
-typedef struct log_info_t {
-       char *log_buffer;
-       uint32 log_buffer_len;
-       uint32 log_buffer_pos;
-       area_id area;
-} log_info;
-
-#ifdef ENABLE_LOGGING
-
-
-// write one log entry
-void log( log_info *li, uint16 what, const uint8 num_args, ... )
-{
-       uint32 pos;
-       va_list vl;
-       log_entry *entry;
-       uint32 i;
-       uint32 entry_size;
-       
-       entry_size = sizeof( log_entry ) + (num_args - 1) * sizeof( uint32 );
-       pos = atomic_add( &li->log_buffer_pos, entry_size );
-               
-       if( li->log_buffer_pos > li->log_buffer_len ) {
-               atomic_add( &li->log_buffer_pos, -entry_size );
-               return;
-       }
-       
-       entry = (log_entry *)&li->log_buffer[pos];
-       
-       entry->tsc = system_time();
-       entry->what = what;
-       entry->num_args = num_args;
-       
-       va_start( vl, num_args );
-       for( i = 0; i < num_args; ++i ) {
-               entry->args[i] = va_arg( vl, uint32 );
-       }
-       va_end( vl );
-}
-
-#ifdef LOG_INCLUDE_STARTUP
-
-// create log buffer
-log_info *log_init( uint32 size )
-{
-       log_info *li;
-       area_id area;
-
-       // buffer must be accessible from user mem
-       // to allow logging from there as well;
-       // you cannot clone this area as there are
-       // pointers which would break (it wouldn't be
-       // hard to get rid of them, but I don't care
-       // and keep it as simple as possible)
-       area = create_area( "fast_logger", 
-               (void **)&li, B_ANY_KERNEL_ADDRESS, 
-               (sizeof( log_info ) + size + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE 
- 1), 
-               B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA );
-               
-       if( area < 0 )
-               panic( "Radeon Fast logger: cannot allocate %ld byte for 
logging data\n", size );
-
-       li->area = area;
-       li->log_buffer = (char *)li + sizeof( log_info );
-       li->log_buffer_len = size;
-       li->log_buffer_pos = 0;
-       
-       return li;
-}
-
-// clean-up logging
-void log_exit( log_info *li )
-{
-       li->log_buffer_pos = 0;
-       //free( li->log_buffer );
-       delete_area( li->area );
-}
-
-#endif
-
-#endif
-
-
-#ifdef LOG_INCLUDE_STARTUP
-
-// get *current* size of logging data
-uint32 log_getsize( log_info *li )
-{
-       if( li == NULL )
-               return 0;
-               
-       dprintf( "RADEON -- log_getsize: log_pos %ld\n", li->log_buffer_pos );
-       return li->log_buffer_pos;
-}
-
-// get up to max_size bytes of logging data
-void log_getcopy( log_info *li, void *dest, uint32 max_size )
-{
-       if( li == NULL )
-               return;
-               
-       dprintf( "RADEON -- log_getcopy: max_size %ld, log_pos %ld\n", 
-               max_size, li->log_buffer_pos );
-       memcpy( dest, li->log_buffer, min( li->log_buffer_pos, max_size ));
-       
-       li->log_buffer_pos = 0;
-}
-
-#endif
diff --git a/src/add-ons/kernel/drivers/graphics/common/log_dump.c 
b/src/add-ons/kernel/drivers/graphics/common/log_dump.c
deleted file mode 100644
index fb4d79b..0000000
--- a/src/add-ons/kernel/drivers/graphics/common/log_dump.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-       Copyright (c) 2002, Thomas Kurschel
-
-
-       Part of Radeon driver
-               
-       Fast logger - functions to create dump
-*/
-
-
-#include <stdio.h>
-#include <OS.h>
-
-#include "log_coll.h"
-#include "log_dump.h"
-#include "log_enum.h"
-#include "log_names.h"
-
-system_info sysinfo;
-
-// dump one entry
-static void log_printentry( FILE *logfile, log_entry *entry )
-{
-       uint64 time;
-       uint32 min, sec, mill, mic;
-               
-       time = entry->tsc / (sysinfo.cpu_clock_speed / 1000000);
-       mic = time % 1000;
-       time /= 1000;
-       mill = time % 1000;
-       time /= 1000;
-       sec = time % 60;
-       time /= 60;
-       min = time;
-       
-       fprintf( logfile, "%03ld:%02ld:%03ld.%03ld ", min, sec, mill, mic );
-       if( entry->what < sizeof( log_names ) / sizeof( log_names[0] ) )
-               fprintf( logfile, log_names[entry->what] );
-       else
-               fprintf( logfile, "unknown %ld", (uint32)entry->what );
-               
-       if( entry->num_args > 0 ) {
-               uint32 i;
-               
-               fprintf( logfile, " (" );
-               for( i = 0; i < entry->num_args; ++i ) {
-                       if( i > 0 )
-                               fprintf( logfile, ", " );
-                               
-                       fprintf( logfile, "0x%08lx", entry->args[i] );
-               }
-               fprintf( logfile, ")" );
-       }
-       
-       fprintf( logfile, "\n" );
-}
-
-
-// dump entire log
-void log_printall( FILE *logfile, char *buffer, uint32 buffer_len )
-{
-       uint32 pos;
-       
-       get_system_info( &sysinfo );
-
-       for( pos = 0; pos < buffer_len;  ) {
-               log_entry *entry;
-               
-               entry = (log_entry *)(buffer + pos);
-               log_printentry( logfile, entry/*, &tsc*/ );
-               pos += sizeof( log_entry ) + (entry->num_args - 1) * sizeof( 
uint32 );
-       }
-}
diff --git a/src/add-ons/kernel/drivers/graphics/common/log_dump.h 
b/src/add-ons/kernel/drivers/graphics/common/log_dump.h
deleted file mode 100644
index bb2a775..0000000
--- a/src/add-ons/kernel/drivers/graphics/common/log_dump.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
-       Copyright (c) 2002, Thomas Kurschel
-
-
-       Part of Radeon accelerant
-               
-       Fast logger - functions to create dump
-*/
-
-#ifndef __LOG_DUMP_H__
-#define __LOG_DUMP_H__
-
-#include <SupportDefs.h>
-
-void log_printall( FILE *logfile, char *buffer, uint32 buffer_len );
-
-#endif


Other related posts:

  • » [haiku-commits] BRANCH pdziepak-github.scheduler [320164b] in src: add-ons/kernel/drivers/graphics/common system/libroot/posix/malloc apps/processcontroller - pdziepak-github . scheduler