;; 
;;  Copyright (c) 2005-2009 uim Project http://code.google.com/p/uim/
;;
;;  All rights reserved.
;;
;;  Redistribution and use in source and binary forms, with or
;;  without modification, are permitted provided that the
;;  following conditions are met:
;;
;;  1. Redistributions of source code must retain the above
;;     copyright notice, this list of conditions and the
;;     following disclaimer.
;;  2. 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.
;;  3. Neither the name of authors 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 THE COPYRIGHT HOLDERS AND
;;  CONTRIBUTORS "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 THE COPYRIGHT OWNER OR
;;  CONTRIBUTORS 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.
;;

(defvar uim-debug-enable nil) 
(defvar uim-debug-buffer nil)
(defconst uim-debug-buffer-name "uim-debug")

(defvar uim-timestamp-list nil)

(defun uim-debug (msg)
  (if uim-debug-enable
      (progn
	(if (not uim-debug-buffer)
	    (setq uim-debug-buffer (get-buffer-create uim-debug-buffer-name)))
	(save-current-buffer
	  (set-buffer uim-debug-buffer)
	  (goto-char 0)
	  (insert msg)
	  (insert "\n")))))

(defun uim-timestamp (name)
  (setq uim-timestamp-list (append uim-timestamp-list
				   (list (list (current-time) name)))))

(defun uim-reset-timestamp ()
  (setq uim-timestamp-list nil))

(defun uim-show-timestamp ()
  (let (sec1 sec2 microsec current (start 0))
    (while uim-timestamp-list
      (setq sec1 (nth 0 (caar uim-timestamp-list)))
      (setq sec2 (nth 1 (caar uim-timestamp-list)))
      (setq microsec (nth 2 (caar uim-timestamp-list)))
      (setq current (+ (* (+ (lsh sec1 16) sec2) 1000) (/ microsec 1000)))

      (if (= start 0)
	  (setq start current))

      (uim-debug (format "%5d :%s (%d)"
			 (- current start)
			 (car (cdar uim-timestamp-list))
			 (memory-limit)
			 ))

      (setq uim-timestamp-list (cdr uim-timestamp-list)))))

(provide 'uim-debug)

